glob
— Расширение шаблона имени пути в стиле Unix¶
Источник: Lib/glob.py
Модуль glob
находит все имена путей, соответствующие заданному шаблону, в соответствии с правилами, используемыми оболочкой Unix, хотя результаты возвращаются в произвольном порядке. Расширение тильды не выполняется, но *
, ?
и диапазоны символов, выраженные с помощью []
, будут правильно сопоставлены. Это достигается за счет совместного использования функций os.scandir()
и fnmatch.fnmatch()
, а не за счет фактического вызова под-оболочки.
Обратите внимание, что файлы, начинающиеся с точки (.
), могут быть сопоставлены только с шаблонами, которые также начинаются с точки, в отличие от fnmatch.fnmatch()
или pathlib.Path.glob()
. (Для расширения тильды и переменных оболочки используйте os.path.expanduser()
и os.path.expandvars()
).
Для буквального совпадения оберните метасимволы в скобки. Например, '[?]'
соответствует символу '?'
.
Модуль glob
определяет следующие функции:
- glob.glob(pathname, *, root_dir=None, dir_fd=None, recursive=False, include_hidden=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 равно 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
.Примечание
Использование шаблона «
**
» в больших деревьях каталогов может занимать непомерно много времени.Примечание
Эта функция может возвращать дублирующиеся имена путей, если pathname содержит несколько шаблонов «
**
» и значение recursive равно true.Изменено в версии 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
.Примечание
Эта функция может возвращать дублирующиеся имена путей, если pathname содержит несколько шаблонов «
**
» и значение recursive равно true.Изменено в версии 3.5: Поддержка рекурсивных глобусов с использованием «
**
».Изменено в версии 3.10: Добавлены параметры root_dir и dir_fd.
Изменено в версии 3.11: Добавлен параметр include_hidden.
- glob.escape(pathname)¶
Эскейп всех специальных символов (
'?'
,'*'
и'['
). Это полезно, если нужно сопоставить произвольную буквенную строку, в которой могут присутствовать специальные символы. Специальные символы в общих точках диска/UNC не экранируются, например, в Windowsescape('//?/c:/Quo vadis?.txt')
возвращает'//?/c:/Quo vadis[?].txt'
.Added in version 3.4.
- glob.translate(pathname, *, recursive=False, include_hidden=False, seps=None)¶
Преобразует заданную спецификацию пути в регулярное выражение для использования с
re.match()
. Спецификация пути может содержать подстановочные знаки в стиле оболочки.Например:
>>> import glob, re >>> >>> regex = glob.translate('**/*.txt', recursive=True, include_hidden=True) >>> regex '(?s:(?:.+/)?[^/]*\\.txt)\\Z' >>> reobj = re.compile(regex) >>> reobj.match('foo/bar/baz.txt') <re.Match object; span=(0, 15), match='foo/bar/baz.txt'>
В отличие от
fnmatch.translate()
, разделители и сегменты пути имеют смысл для этой функции. По умолчанию подстановочные знаки не совпадают с разделителями путей, а сегменты шаблона*
соответствуют только одному сегменту пути.Если значение recursive равно true, сегмент шаблона «
**
» будет соответствовать любому количеству сегментов пути.Если значение include_hidden равно true, подстановочные знаки могут соответствовать сегментам пути, начинающимся с точки (
.
).В аргументе seps может быть указана последовательность разделителей путей. Если она не указана, то используются
os.sep
иaltsep
(если есть).См.также
Методы
pathlib.PurePath.full_match()
иpathlib.Path.glob()
, которые вызывают эту функцию, чтобы реализовать сопоставление шаблонов и globbing.Added in version 3.13.
Примеры¶
Рассмотрим каталог, содержащий следующие файлы: 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
предлагает расширение имени файла (не пути) в стиле оболочки.
См.также
Модуль pathlib
предлагает высокоуровневые объекты пути.