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) -
Возвращает, возможно, пустой список имён путей, которые соответствуют 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, то файлы не будут соответствовать.Вызывает событие аудита аудита
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']
См. также
-
Modulefnmatch -
Сопоставление шаблонов имён файлов (не путей) в стиле оболочки
© 2001–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.10/library/glob.html