Содержание страницы
glob – расширение шаблонов путей в стиле Unix¶glob – Unix style pathname pattern expansion
Исходный код: 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) и может содержать подстановочные знаки в стиле оболочки. Сломанные символические ссылки включаются в результаты (как в оболочке). Упорядочены ли результаты, зависит от файловой системы. Если во время вызова этой функции файл, удовлетворяющий условиям, будет удалён или добавлен, не определено, будет ли включён путь к этому файлу.If root_dir is not
None, it should be a path-like object specifying the root directory for searching. It has the same effect onglob()as changing the current directory before calling it. If pathname is relative, the result will contain paths relative to root_dir.Эта функция поддерживает пути относительно файловых дескрипторов каталогов с помощью параметра dir_fd.
Если recursive истинно, шаблон «
**» будет соответствовать любым файлам и нулю или более каталогам, подкаталогам и символическим ссылкам на каталоги. Если за шаблоном следуетos.sepилиos.altsep, файлы не будут сопоставляться.Если include_hidden истинно, подстановочные знаки могут сопоставляться с сегментами пути, начинающимися с точки (
.).Возбуждает событие аудита
glob.globс аргументамиpathname,recursive.Возбуждает событие аудита
glob.glob/2с аргументамиpathname,recursive,root_dir,dir_fd.Примечание
Использование шаблона «
**» в больших деревьях каталогов может занять чрезмерно много времени.Примечание
Эта функция может возвращать повторяющиеся имена путей, если pathname содержит несколько шаблонов «
**» и recursive истинно.Примечание
Все исключения
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 истинно.Примечание
Все исключения
OSError, возникающие при сканировании файловой системы, подавляются. ВключаяPermissionErrorпри доступе к каталогам без права на чтение.Изменено в версии 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(), которые вызывают эту функцию для реализации сопоставления с шаблоном и поиска по шаблону (globbing).Добавлено в версии 3.13.
Примеры¶Examples
Рассмотрим каталог, содержащий следующие файлы:
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 предоставляет высокоуровневые объекты путей.