Документация Python неофициальный перевод

11.7. glob – расширение шаблонов путей в стиле Unixglob – Unix style pathname pattern expansion

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


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

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

См. также

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

glob.glob(pathname)

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

glob.iglob(pathname)

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

glob.escape(pathname)

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

Новое в версии 3.4.

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

>>> import glob
>>> glob.glob('./[0-9].*')
['./1.gif', './2.txt']
>>> glob.glob('*.gif')
['1.gif', 'card.gif']
>>> glob.glob('?.gif')
['1.gif']

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

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

См. также

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