glob — Расширение шаблона имени пути в стиле Unix

Исходный код: Lib/glob.py


Модуль glob находит все пути, соответствующие заданному шаблону, в соответствии с правилами, используемыми оболочкой Unix, хотя результаты возвращаются в произвольном порядке. Расширение тильды не выполняется, но *, ? и диапазоны символов, выраженные с помощью [], будут сопоставлены правильно. Это достигается за счёт совместного использования функций os.scandir() и fnmatch.fnmatch(), а не путем фактического вызова подоболочки. Обратите внимание, что в отличие от fnmatch.fnmatch(), glob обрабатывает имена файлов, начинающиеся с точки (.), как особые случаи. (Для раскрытия тильды и переменных оболочки используйте os.path.expanduser() и os.path.expandvars().)

Для буквального совпадения заключите метасимволы в квадратные скобки. Например, '[?]' соответствует символу '?'.

См.также

Модуль pathlib предлагает высокоуровневые объекты пути.

glob.glob(pathname, *, recursive=False)

Возвращает возможно пустой список имён путей, соответствующих pathname, который должен быть строкой, содержащей спецификацию пути. pathname может быть абсолютным (например, /usr/src/Python-1.5/Makefile) или относительным (например, ../../Tools/*/*.gif) и может содержать подстановочные знаки в стиле оболочки. Неработающие символические ссылки включаются в результаты (как в оболочке). Сортировка результатов зависит от файловой системы. Если файл, удовлетворяющий условиям, удаляется или добавляется во время вызова этой функции, не указывается, будет ли включен путь к этому файлу.

Если recursive истинно, шаблон «**» будет соответствовать любым файлам и нулю или более каталогам, подкаталогам и символическим ссылкам на каталоги. Если за шаблоном следует os.sep или os.altsep, не будет соответствия файлам.

Поднимает событие аудита glob.glob с аргументами pathname, recursive.

Примечание

Использование шаблона «**» в больших деревьях каталогов может занять чрезмерно много времени.

Изменено в версии 3.5: Поддержка рекурсивных glob с использованием «**».

glob.iglob(pathname, *, recursive=False)

Возвращает итератор, который даёт те же значения, что и glob(), без фактического сохранения их всех одновременно.

Поднимает событие аудита glob.glob с аргументами pathname, recursive.

glob.escape(pathname)

Экранировать все специальные символы ('?', '*' и '['). Это полезно, если вы хотите сопоставить произвольную буквальную строку, которая может содержать специальные символы. Специальные символы в точках доступа диска/UNC не экранируются, например в Windows escape('//?/c:/Quo vadis?.txt') возвращает '//?/c:/Quo vadis[?].txt'.

Добавлено в версии 3.4.

Например, рассмотрим каталог, содержащий следующие файлы: 1.gif, 2.txt, card.gif и подкаталог sub, содержащий только файл 3.txt. 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']

См.также

Модуль fnmatch
Расширение имени файла (не пути) в стиле оболочки