Spec-Zone.ru › Python 3.14

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.

Примечание

Все исключения OSError, возникающие при сканировании файловой системы, подавляются. К ним относится PermissionError при доступе к каталогам без разрешения на чтение.

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

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

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

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

Примечание

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

Примечание

Все исключения OSError, возникающие при сканировании файловой системы, подавляются. К ним относится PermissionError при доступе к каталогам без разрешения на чтение.

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

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

Добавлено в версии 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 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.14/library/glob.html

Spec-Zone.ru

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