Рекурсивное глобирование с использованием подстановочного знака без добавления дополнительного уровня каталога

#python #recursion #glob

#python #рекурсия #глоб

Вопрос:

Я пытаюсь построить абсолютные пути к файлам с помощью glob, используя подстановочные знаки. Используя этот код.

 list_of_files = glob.glob(globable_file_path, recursive=True)
 

Теперь я передаю этому список глобируемых путей к файлам. При таком формате это работает

 ?Z:level_1level_2***12345*.pdf
 

Но вышесказанное добавляет дополнительный уровень () каталога, и я не могу изменить родительский путь. Итак, я пробовал подобные вещи

 ?Z:level_1level_2**12345*.pdf
?Z:level_1level_2[**]12345*.pdf
?Z:level_1level_2**[12345]*.pdf
 

Но ни один из них не работает. Как я мог бы избежать добавления дополнительного уровня каталога, но глобально рекурсивно с использованием подстановочных знаков?

Документы показывают это

 >>> glob.glob('**/*.txt', recursive=True)
['2.txt', 'sub/3.txt']
>>> glob.glob('./**/', recursive=True)
['./', './sub/']
 

Что предполагает, что вам нужен дополнительный для рекурсивного поиска. Есть ли способ сделать это с помощью pathlib или os.path или какого-то трюка, о котором я не знаю?

Ответ №1:

Итак, это работает с использованием pathlib

 from pathlib import Path

for path in Path(globable_file_path).rglob("*"   str(log1)   "*.pdf"):
    list_of_files.append(path.__str__())
 

Я использовал этот __str__ метод для преобразования из WindowsPath в строку.