11.7. glob – расширение шаблонов путей в стиле Unix¶glob – 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
- Расширение имен файлов (не путей) в стиле оболочки