Spec-Zone.ru › Python 3.12

glob — раскрытие шаблонов путей в стиле Unix

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

Модуль glob находит все имена путей, соответствующие заданному шаблону согласно правилам, используемым оболочкой Unix, хотя результаты возвращаются в произвольном порядке. Раскрытие тильды не выполняется, но *, ? и диапазоны символов, заданные с помощью [], сопоставляются правильно. Для этого совместно используются функции os.scandir() и fnmatch.fnmatch(), а не вызывается подоболочка.

Обратите внимание: файлы, имена которых начинаются с точки (.), могут соответствовать только шаблонам, которые также начинаются с точки, в отличие от fnmatch.fnmatch() или pathlib.Path.glob(). (Для раскрытия тильды и переменных оболочки используйте os.path.expanduser() и os.path.expandvars().)

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

См. также

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

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.

Например, рассмотрим каталог, содержащий следующие файлы: 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']

См. также

Module fnmatch

Раскрытие имён файлов (не путей) в стиле оболочки

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

Spec-Zone.ru

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