Spec-Zone.ru › Python 3.13

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) и может содержать подстановочные символы в стиле оболочки. В результаты включаются неработающие символические ссылки (как и в оболочке). Порядок сортировки результатов зависит от файловой системы. Если во время вызова этой функции файл, удовлетворяющий условиям, будет удален или добавлен, наличие имени пути к этому файлу в результатах не определено.

Если root_dir не равен None, это должен быть объект, подобный пути, задающий корневой каталог для поиска. Он оказывает на glob() такое же действие, как смена текущего каталога перед вызовом функции. Если pathname является относительным, результат будет содержать пути относительно root_dir.

Эта функция может поддерживать пути относительно дескрипторов каталогов с помощью параметра dir_fd.

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

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

Вызывает событие аудита glob.glob с аргументами pathname, recursive.

Вызывает событие аудита glob.glob/2 с аргументами pathname, recursive, root_dir, dir_fd.

Примечание

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

Примечание

Эта функция может возвращать повторяющиеся имена путей, если pathname содержит несколько шаблонов «**» и recursive имеет значение true.

Изменено в версии 3.5: Добавлена поддержка рекурсивных шаблонов glob с использованием «**».

Изменено в версии 3.10: Добавлены параметры root_dir и dir_fd.

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

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

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

Вызывает событие аудита glob.glob с аргументами pathname, recursive.

Вызывает событие аудита glob.glob/2 с аргументами pathname, recursive, root_dir, dir_fd.

Примечание

Эта функция может возвращать повторяющиеся имена путей, если pathname содержит несколько шаблонов «**» и recursive имеет значение true.

Изменено в версии 3.5: Добавлена поддержка рекурсивных шаблонов glob с использованием «**».

Изменено в версии 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.

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(), которые вызывают эту функцию для реализации сопоставления с шаблоном и поиска по шаблону glob.

Добавлено в версии 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 предоставляет высокоуровневые объекты путей.

© 2001–2025 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/library/glob.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API