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

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


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

Обратите внимание, что файлы, начинающиеся с точки (.), могут быть сопоставлены только с шаблонами, которые также начинаются с точки, в отличие от fnmatch.fnmatch() или pathlib.Path.glob(). (Для тильды и расширения переменных оболочки используйте os.path.expanduser() и os.path.expandvars()).

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

См.также

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

glob.glob(pathname, *, root_dir=None, dir_fd=None, recursive=False)

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

Если root_dir не None, то это должно быть path-like object, указывающее корневой каталог для поиска. Это имеет тот же эффект для glob(), что и изменение текущего каталога перед вызовом. Если pathname является относительным, результат будет содержать пути относительно root_dir.

Эта функция может поддерживать paths relative to directory descriptors с параметром dir_fd.

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

Вызывает auditing event glob.glob с аргументами pathname, recursive.

Вызывает auditing event glob.glob/2 с аргументами pathname, recursive, root_dir, dir_fd.

Примечание

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

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

Изменено в версии 3.10: Добавлены параметры root_dir и dir_fd.

glob.iglob(pathname, *, root_dir=None, dir_fd=None, recursive=False)

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

Вызывает auditing event glob.glob с аргументами pathname, recursive.

Вызывает auditing event glob.glob/2 с аргументами pathname, recursive, root_dir, dir_fd.

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

Изменено в версии 3.10: Добавлены параметры root_dir и dir_fd.

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

Расширение имени файла (не пути) в стиле Shell

Вернуться на верх