Сообщить об ошибке.

Поиск файлов по шаблонам в стиле Unix

Модуль glob находит все пути, соответствующие указанному шаблону, в соответствии с правилами, используемыми оболочкой Unix. Результаты возвращаются в произвольном порядке.

Расширение переменных пути при указании тильды ~/path не выполняется, но символы '*','?' и диапазоны символов, такие как [a-z0-9], будут работать правильно. Это делается с помощью согласованных функций os.scandir() и fnmatch.fnmatch(), а не путем фактического вызова оболочки.

Обратите внимание, что в отличие от fnmatch.fnmatch(), модуль glob рассматривает имена файлов, начинающиеся с точки '.', как особые случаи.

  • Для расширения переменных пути при указании тильды ~ используйте функцию os.path.expanduser() и os.path.expandvars().
  • Для буквального совпадения метасимволов заключите их в скобки. Например [?] Соответствует символу ?.

Смотрите также модуль pathlib, который предлагает высокоуровневые объекты пути.

Примеры использования:

Рассмотрим каталог, содержащий следующие файлы: 1.gif, 2.txt, card.gif и вложенный каталог sub, который содержит только файл 3.txt. Функция glob.glob() даст следующие результаты. Обратите внимание, как сохраняются любые ведущие компоненты пути.

>>> import glob
>>> glob.glob('./[0-9].*')
# ['./1.gif', './2.txt']
>>> glob.glob('*.gif')
# ['1.gif', 'card.gif']
>>> glob.glob('?.gif')
# ['1.gif']
>>> glob.glob('**/*.txt', recursive=True)
# ['2.txt', 'sub/3.txt']
>>> glob.glob('./**/', recursive=True)
# ['./', './sub/']

Если каталог содержит файлы, начинающиеся с точки '.', то они не будут сопоставлены по умолчанию. Например, рассмотрим каталог, содержащий card.gif и .card.gif:

>>> import glob
>>> glob.glob('*.gif')
# ['card.gif']
>>> glob.glob('.c*')
# ['.card.gif']