Найдите правильный путь с помощью шаблона интенсивного использования

Я пытаюсь преобразовать неправильные пути без учета регистра в правильные пути с учетом регистра.

Учитывая такой путь, как ./cAsE/SeNsItIvE, как я могу найти правильный путь с помощью этой формы? ./CaSe/sEnSiTiVe?

Пример не означает, что я ищу полную инверсию - т.е. .\DIR\file должен преобразоваться в ./dir/file, если ./dir/file существует в системе.

Очевидно, я играл с glob и не могу найти правила, чтобы справиться с этим.

Я никого не утомлю своими тусклыми усилиями.

Спасибо!

Обновлено:

Я закончил тем, что создал базу данных всех допустимых путей, а затем сопоставил вводимые пути с шаблоном без учета регистра.

Интересно, есть ли лучший способ сделать это:

#build path database to resolve mispelled paths
paths = []
def build_path_db():
    global paths
    for filename in iglob('/mdt/**', recursive=True):
        abs_path = Path(filename).resolve() # get the absolute path
        rel_path = abs_path.relative_to('/mdt') # convert to relative path    
        paths.append(rel_path)
build_path_db()

#takes string, returns string
def unixify_path(win_path):
    pure_win_path = PureWindowsPath(win_path)
    #print(pure_win_path)
    posix_path = Path(pure_win_path)

    #check if path is valid
    if posix_path.exists():
        print('already correct!')
    else:
        #print('incorrect!')
        posix_path_str = str(posix_path)

        #computer case insensitive regex pattern for hunted file
        pattern = compile(translate(posix_path_str), IGNORECASE)

        #check to see if case inensitive pattern matches actual paths
        for path in paths:
            if pattern.match(str(path)):
                #print('match found! %s ' % path)
                return path

«Я никого не утомлю своими тусклыми усилиями». - Я думаю, что лучше, если вы все равно дадите свои попытки, это улучшит ваш вопрос и облегчит помощь.

kabanus 02.05.2018 09:31

Кроме того, вам просто нужно совпадение без учета регистра (например, машина с Windows) или закрытие совпадения? В Linux, если бы существовали и a/b/c, и A/B/c, соответствовали бы вы обоим?

kabanus 02.05.2018 09:33

Вы можете сравнить два пути в нижнем регистре, и если они совпадают, остальное вам известно.

Abhishek Dujari 02.05.2018 09:35

Я хочу имитировать разрешение пути Windows на машине * nix. У меня есть пути Windows на машине * nix, которые не работают из-за неправильного регистра. Я хочу превратить этот неправильный путь в рабочий на машине * nix. Мне не нужно беспокоиться о столкновениях.

Joenarr Bronarsson 02.05.2018 10:54
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
4
141
0

Другие вопросы по теме