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

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


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

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

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

См.также

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

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

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

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

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

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

Если значение include_hidden равно true, «**» шаблон будет соответствовать скрытым каталогам.

Создает 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.

Изменено в версии 3.11: Добавлен параметр include_hidden.

glob.iglob(pathname, *, root_dir=None, dir_fd=None, recursive=False, include_hidden=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.

Изменено в версии 3.11: Добавлен параметр include_hidden.

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

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

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