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, файлы не будут совпадать.

Raises an auditing event glob.glob with arguments pathname, recursive.

Примечание

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

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

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

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

Raises an auditing event glob.glob with arguments pathname, recursive.

glob.escape(pathname)

Скрытие всех специальных символов ('?', '*' и '['). Это полезно, если требуется сопоставить произвольное литерал строка, которое может содержать специальные символы. Специальных знаков в диск/UNC sharepoints не экранируются, например в 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
Расширение имени файла в стиле шелл (не пути).