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().)
Для точного совпадения заключите метасимволы в скобки.
Например, '[?]' соответствует символу '?'.
См. также
Модуль pathlib предоставляет высокоуровневые объекты путей.
-
glob.glob(pathname, *, root_dir=None, dir_fd=None, recursive=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, файлы не будут сопоставляться.Возбуждает событие аудита
glob.globс аргументамиpathname,recursive.Возбуждает событие аудита
glob.glob/2с аргументамиpathname,recursive,root_dir,dir_fd.Примечание
Использование шаблона «
**» в больших деревьях каталогов может занять чрезмерно много времени.Изменено в версии 3.5: Добавлена поддержка рекурсивных шаблонов с помощью «
**».Изменено в версии 3.10: Добавлены параметры root_dir и dir_fd.
-
glob.iglob(pathname, *, root_dir=None, dir_fd=None, recursive=False)¶ Возвращает итератор, который порождает те же значения, что и
glob(), но не сохраняет их все одновременно.Возбуждает событие аудита
glob.globс аргументамиpathname,recursive.Возбуждает событие аудита
glob.glob/2с аргументамиpathname,recursive,root_dir,dir_fd.Изменено в версии 3.5: Добавлена поддержка рекурсивных шаблонов с помощью «
**».Изменено в версии 3.10: Добавлены параметры root_dir и dir_fd.
-
glob.escape(pathname)¶ Экранирует все специальные символы (
'?','*'и'['). Это полезно, если нужно сопоставить произвольную буквальную строку, которая может содержать специальные символы. Специальные символы в точках монтирования дисков/UNC не экранируются, например, в Windowsescape('//?/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']
См. также
- Модуль
fnmatch Расширение имен файлов (не путей) в стиле оболочки