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: Поддержка рекурсивных шаблонов с использованием “**”.

Изменено в версии 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: Поддержка рекурсивных шаблонов с использованием “**”.

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