Документация Python неофициальный перевод

glob.md

108 строк · 9.4 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.12/library/glob.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `glob` – расширение шаблонов путей в стиле Unix89**Исходный код:** [Lib/glob.py](https://python-all.ru/src/3.12/Lib/glob.py)1011---1213Модуль [`glob`](https://python-all.ru/3.12/library/glob.html#module-glob) находит все пути, соответствующие указанному шаблону по правилам, используемым в оболочке Unix, хотя результаты возвращаются в произвольном порядке. Подстановка тильды не выполняется, но `*`, `?` и диапазоны символов, заданные с помощью `[]`, будут сопоставлены корректно. Это делается с помощью совместного использования функций [`os.scandir()`](https://python-all.ru/3.12/library/os.html#os.scandir) и [`fnmatch.fnmatch()`](https://python-all.ru/3.12/library/fnmatch.html#fnmatch.fnmatch), а не путем фактического запуска подоболочки.1415Обратите внимание, что файлы, начинающиеся с точки (`.`), могут быть сопоставлены только шаблонами, которые также начинаются с точки, в отличие от [`fnmatch.fnmatch()`](https://python-all.ru/3.12/library/fnmatch.html#fnmatch.fnmatch) или [`pathlib.Path.glob()`](https://python-all.ru/3.12/library/pathlib.html#pathlib.Path.glob). (Для подстановки тильды и переменных оболочки используйте [`os.path.expanduser()`](https://python-all.ru/3.12/library/os.path.html#os.path.expanduser) и [`os.path.expandvars()`](https://python-all.ru/3.12/library/os.path.html#os.path.expandvars).)1617Для точного совпадения заключите метасимволы в скобки. Например, `'[?]'` соответствует символу `'?'`.1819> **См. также**20>21> Модуль [`pathlib`](https://python-all.ru/3.12/library/pathlib.html#module-pathlib) предоставляет высокоуровневые объекты путей.2223#### `glob.glob(pathname, *, root_dir=None, dir_fd=None, recursive=False, include_hidden=False)`2425Возвращает, возможно, пустой список путей, соответствующих шаблону *pathname* (строка с указанием пути). *pathname* может быть абсолютным (например, `/usr/src/Python-1.5/Makefile`) или относительным (например, `../../Tools/*/*.gif`) и может содержать подстановочные знаки в стиле оболочки. Сломанные символические ссылки включаются в результаты (как в оболочке). Упорядочены ли результаты, зависит от файловой системы. Если во время вызова этой функции файл, удовлетворяющий условиям, будет удалён или добавлен, не определено, будет ли включён путь к этому файлу.2627If *root\_dir* is not `None`, it should be a [path-like object](https://python-all.ru/3.12/glossary.html#term-path-like-object) specifying the root directory for searching. It has the same effect on [`glob()`](https://python-all.ru/3.12/library/glob.html#module-glob) as changing the current directory before calling it. If *pathname* is relative, the result will contain paths relative to *root\_dir*.2829Эта функция поддерживает [пути относительно файловых дескрипторов каталогов](https://python-all.ru/3.12/library/os.html#dir-fd) с помощью параметра *dir\_fd*.3031Если *recursive* истинно, шаблон «`**`» будет соответствовать любым файлам и нулю или более каталогам, подкаталогам и символическим ссылкам на каталоги. Если за шаблоном следует [`os.sep`](https://python-all.ru/3.12/library/os.html#os.sep) или [`os.altsep`](https://python-all.ru/3.12/library/os.html#os.altsep), файлы не будут сопоставляться.3233Если *include\_hidden* равно true, шаблон «`**`» будет сопоставлять скрытые каталоги.3435Возбуждает [событие аудита](https://python-all.ru/3.12/library/sys.html#auditing) `glob.glob` с аргументами `pathname`, `recursive`.3637Возбуждает [событие аудита](https://python-all.ru/3.12/library/sys.html#auditing) `glob.glob/2` с аргументами `pathname`, `recursive`, `root_dir`, `dir_fd`.3839> **Примечание**40>41> Использование шаблона «`**`» в больших деревьях каталогов может занять чрезмерно много времени.4243> **Примечание**44>45> Эта функция может возвращать повторяющиеся имена путей, если *pathname* содержит несколько шаблонов «`**`» и *recursive* истинно.4647Изменено в версии 3.5: Добавлена поддержка рекурсивных шаблонов с помощью «`**`».4849Изменено в версии 3.10: Добавлены параметры *root\_dir* и *dir\_fd*.5051Изменено в версии 3.11: Добавлен параметр *include\_hidden*.5253#### `glob.iglob(pathname, *, root_dir=None, dir_fd=None, recursive=False, include_hidden=False)`5455Возвращает [итератор](https://python-all.ru/3.12/glossary.html#term-iterator), который порождает те же значения, что и [`glob()`](https://python-all.ru/3.12/library/glob.html#module-glob), но не сохраняет их все одновременно.5657Возбуждает [событие аудита](https://python-all.ru/3.12/library/sys.html#auditing) `glob.glob` с аргументами `pathname`, `recursive`.5859Возбуждает [событие аудита](https://python-all.ru/3.12/library/sys.html#auditing) `glob.glob/2` с аргументами `pathname`, `recursive`, `root_dir`, `dir_fd`.6061> **Примечание**62>63> Эта функция может возвращать повторяющиеся имена путей, если *pathname* содержит несколько шаблонов «`**`» и *recursive* истинно.6465Изменено в версии 3.5: Добавлена поддержка рекурсивных шаблонов с помощью «`**`».6667Изменено в версии 3.10: Добавлены параметры *root\_dir* и *dir\_fd*.6869Изменено в версии 3.11: Добавлен параметр *include\_hidden*.7071#### `glob.escape(pathname)`7273Экранирует все специальные символы (`'?'`, `'*'` и `'['`). Это полезно, если нужно сопоставить произвольную буквальную строку, которая может содержать специальные символы. Специальные символы в точках монтирования дисков/UNC не экранируются, например, в Windows `escape('//?/c:/Quo vadis?.txt')` возвращает `'//?/c:/Quo vadis[?].txt'`.7475Добавлено в версии 3.4.7677Например, рассмотрим каталог, содержащий следующие файлы: `1.gif`, `2.txt`, `card.gif` и подкаталог `sub`, который содержит только файл `3.txt`. [`glob()`](https://python-all.ru/3.12/library/glob.html#module-glob) выдаст следующие результаты. Обратите внимание, что все начальные компоненты пути сохраняются.7879```python80>>> import glob81>>> glob.glob('./[0-9].*')82['./1.gif', './2.txt']83>>> glob.glob('*.gif')84['1.gif', 'card.gif']85>>> glob.glob('?.gif')86['1.gif']87>>> glob.glob('**/*.txt', recursive=True)88['2.txt', 'sub/3.txt']89>>> glob.glob('./**/', recursive=True)90['./', './sub/']91```9293Если каталог содержит файлы, начинающиеся с `.`, они не будут сопоставлены по умолчанию. Например, рассмотрим каталог, содержащий `card.gif` и `.card.gif`:9495```python96>>> import glob97>>> glob.glob('*.gif')98['card.gif']99>>> glob.glob('.c*')100['.card.gif']101```102103> **См. также**104>105> **Модуль [`fnmatch`](https://python-all.ru/3.12/library/fnmatch.html#module-fnmatch)**106>107> Расширение имен файлов (не путей) в стиле оболочки108