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: Поддержка рекурсивных шаблонов с использованием «
**».Изменено в версии 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 не экранируются, например, в Windowsescape('//?/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–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/library/glob.html