glob
— Расширение шаблона имени пути в стиле Unix¶
Модуль glob
находит все пути, соответствующие заданному шаблону, в
соответствии с правилами, используемыми оболочкой Unix, хотя результаты
возвращаются в произвольном порядке. Расширение тильды не выполняется, но
*
, ?
и диапазоны символов, выраженные с помощью []
, будут
сопоставлены правильно. Это достигается за счёт совместного использования
функций os.scandir()
и fnmatch.fnmatch()
, а не путем фактического
вызова подоболочки. Обратите внимание, что в отличие от
fnmatch.fnmatch()
, glob
обрабатывает имена файлов, начинающиеся с
точки (.
), как особые случаи. (Для раскрытия тильды и переменных оболочки
используйте os.path.expanduser()
и os.path.expandvars()
.)
Для буквального совпадения заключите метасимволы в квадратные скобки. Например,
'[?]'
соответствует символу '?'
.
См.также
Модуль pathlib
предлагает высокоуровневые объекты пути.
-
glob.
glob
(pathname, *, recursive=False)¶ Возвращает возможно пустой список имён путей, соответствующих pathname, который должен быть строкой, содержащей спецификацию пути. pathname может быть абсолютным (например,
/usr/src/Python-1.5/Makefile
) или относительным (например,../../Tools/*/*.gif
) и может содержать подстановочные знаки в стиле оболочки. Неработающие символические ссылки включаются в результаты (как в оболочке). Сортировка результатов зависит от файловой системы. Если файл, удовлетворяющий условиям, удаляется или добавляется во время вызова этой функции, не указывается, будет ли включен путь к этому файлу.Если recursive истинно, шаблон «
**
» будет соответствовать любым файлам и нулю или более каталогам, подкаталогам и символическим ссылкам на каталоги. Если за шаблоном следуетos.sep
илиos.altsep
, не будет соответствия файлам.Поднимает событие аудита
glob.glob
с аргументамиpathname
,recursive
.Примечание
Использование шаблона «
**
» в больших деревьях каталогов может занять чрезмерно много времени.Изменено в версии 3.5: Поддержка рекурсивных glob с использованием «
**
».
-
glob.
iglob
(pathname, *, recursive=False)¶ Возвращает итератор, который даёт те же значения, что и
glob()
, без фактического сохранения их всех одновременно.Поднимает событие аудита
glob.glob
с аргументамиpathname
,recursive
.
-
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
- Расширение имени файла (не пути) в стиле оболочки