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

glob.md

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

1> **Источник:** https://python-all.ru/3.15/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.15/Lib/glob.py)1011---1213Модуль `glob` находит пути с помощью правил сопоставления с шаблоном, похожих на оболочку Unix. Подстановка тильды не выполняется, но `*`, `?` и диапазоны символов, заданные через `[]`, сопоставляются корректно. Это достигается совместным использованием функций [`os.scandir()`](https://python-all.ru/3.15/library/os.html#os.scandir) и [`fnmatch.fnmatch()`](https://python-all.ru/3.15/library/fnmatch.html#fnmatch.fnmatch), а не вызовом подоболочки.1415> **Примечание**16>17> Пути возвращаются в произвольном порядке. Если нужен определённый порядок, отсортируйте результаты.1819По умолчанию файлы, начинающиеся с точки (`.`), могут быть сопоставлены только с шаблонами, которые тоже начинаются с точки, в отличие от [`fnmatch.fnmatch()`](https://python-all.ru/3.15/library/fnmatch.html#fnmatch.fnmatch) или [`pathlib.Path.glob()`](https://python-all.ru/3.15/library/pathlib.html#pathlib.Path.glob). Для подстановки тильды и переменных оболочки используйте [`os.path.expanduser()`](https://python-all.ru/3.15/library/os.path.html#os.path.expanduser) и [`os.path.expandvars()`](https://python-all.ru/3.15/library/os.path.html#os.path.expandvars).2021Для точного совпадения заключите метасимволы в скобки. Например, `'[?]'` соответствует символу `'?'`.2223Модуль `glob` определяет следующие функции:2425#### `glob.glob(pathname, *, root_dir=None, dir_fd=None, recursive=False, include_hidden=False)`2627Возвращает, возможно, пустой список путей, соответствующих шаблону *pathname* (строка с указанием пути). *pathname* может быть абсолютным (например, `/usr/src/Python-1.5/Makefile`) или относительным (например, `../../Tools/*/*.gif`) и может содержать подстановочные знаки в стиле оболочки. Сломанные символические ссылки включаются в результаты (как в оболочке). Упорядочены ли результаты, зависит от файловой системы. Если во время вызова этой функции файл, удовлетворяющий условиям, будет удалён или добавлен, не определено, будет ли включён путь к этому файлу.2829If *root\_dir* is not `None`, it should be a [path-like object](https://python-all.ru/3.15/glossary.html#term-path-like-object) specifying the root directory for searching. It has the same effect on `glob()` as changing the current directory before calling it. If *pathname* is relative, the result will contain paths relative to *root\_dir*.3031Эта функция поддерживает [пути относительно файловых дескрипторов каталогов](https://python-all.ru/3.15/library/os.html#dir-fd) с помощью параметра *dir\_fd*.3233Если *recursive* истинно, шаблон «`**`» будет соответствовать любым файлам и нулю или более каталогам, подкаталогам и символическим ссылкам на каталоги. Если за шаблоном следует [`os.sep`](https://python-all.ru/3.15/library/os.html#os.sep) или [`os.altsep`](https://python-all.ru/3.15/library/os.html#os.altsep), файлы не будут сопоставляться.3435Если *include\_hidden* истинно, подстановочные знаки могут сопоставляться с сегментами пути, начинающимися с точки (`.`).3637Возбуждает [событие аудита](https://python-all.ru/3.15/library/sys.html#auditing) `glob.glob` с аргументами `pathname`, `recursive`.3839Возбуждает [событие аудита](https://python-all.ru/3.15/library/sys.html#auditing) `glob.glob/2` с аргументами `pathname`, `recursive`, `root_dir`, `dir_fd`.4041> **Примечание**42>43> Использование шаблона «`**`» в больших деревьях каталогов может занять чрезмерно много времени.4445> **Примечание**46>47> Эта функция может возвращать повторяющиеся имена путей, если *pathname* содержит несколько шаблонов «`**`» и *recursive* истинно.4849> **Примечание**50>51> Все исключения [`OSError`](https://python-all.ru/3.15/library/exceptions.html#OSError), возникающие при сканировании файловой системы, подавляются. Включая [`PermissionError`](https://python-all.ru/3.15/library/exceptions.html#PermissionError) при доступе к каталогам без права на чтение.5253Изменено в версии 3.5: Добавлена поддержка рекурсивных шаблонов с помощью «`**`».5455Изменено в версии 3.10: Добавлены параметры *root\_dir* и *dir\_fd*.5657Изменено в версии 3.11: Добавлен параметр *include\_hidden*.5859#### `glob.iglob(pathname, *, root_dir=None, dir_fd=None, recursive=False, include_hidden=False)`6061Возвращает [итератор](https://python-all.ru/3.15/glossary.html#term-iterator), который порождает те же значения, что и [`glob()`](https://python-all.ru/3.15/library/glob.html#module-glob), но не сохраняет их все одновременно.6263Возбуждает [событие аудита](https://python-all.ru/3.15/library/sys.html#auditing) `glob.glob` с аргументами `pathname`, `recursive`.6465Возбуждает [событие аудита](https://python-all.ru/3.15/library/sys.html#auditing) `glob.glob/2` с аргументами `pathname`, `recursive`, `root_dir`, `dir_fd`.6667> **Примечание**68>69> Эта функция может возвращать повторяющиеся имена путей, если *pathname* содержит несколько шаблонов «`**`» и *recursive* истинно.7071> **Примечание**72>73> Все исключения [`OSError`](https://python-all.ru/3.15/library/exceptions.html#OSError), возникающие при сканировании файловой системы, подавляются. Включая [`PermissionError`](https://python-all.ru/3.15/library/exceptions.html#PermissionError) при доступе к каталогам без права на чтение.7475Изменено в версии 3.5: Добавлена поддержка рекурсивных шаблонов с помощью «`**`».7677Изменено в версии 3.10: Добавлены параметры *root\_dir* и *dir\_fd*.7879Изменено в версии 3.11: Добавлен параметр *include\_hidden*.8081#### `glob.escape(pathname)`8283Экранирует все специальные символы (`'?'`, `'*'` и `'['`). Это полезно, если нужно сопоставить произвольную литеральную строку, которая может содержать специальные символы. Специальные символы в точках подключения дисков/UNC не экранируются; например, в Windows `escape('//?/c:/Quo vadis?.txt')` возвращает `'//?/c:/Quo vadis[?].txt'`.8485Добавлено в версии 3.4.8687#### `glob.translate(pathname, *, recursive=False, include_hidden=False, seps=None)`8889Преобразует заданную спецификацию пути в регулярное выражение для использования с [`re.prefixmatch()`](https://python-all.ru/3.15/library/re.html#re.prefixmatch). Спецификация пути может содержать подстановочные знаки в стиле shell.9091Например:9293```python94>>> import glob, re95>>>96>>> regex = glob.translate('**/*.txt', recursive=True, include_hidden=True)97>>> regex98'(?s:(?:.+/)?[^/]*\\.txt)\\z'99>>> reobj = re.compile(regex)100>>> reobj.prefixmatch('foo/bar/baz.txt')101<re.Match object; span=(0, 15), match='foo/bar/baz.txt'>102```103104Разделители и сегменты пути имеют значение для этой функции, в отличие от [`fnmatch.translate()`](https://python-all.ru/3.15/library/fnmatch.html#fnmatch.translate). По умолчанию подстановочные знаки не сопоставляются с разделителями пути, а сегменты шаблона `*` соответствуют ровно одному сегменту пути.105106Если *recursive* равно true, сегмент шаблона “`**`” будет соответствовать любому количеству сегментов пути.107108Если *include\_hidden* равно true, подстановочные знаки могут соответствовать сегментам пути, которые начинаются с точки (`.`).109110Последовательность разделителей пути может быть передана аргументу *seps*. Если не задан, используются [`os.sep`](https://python-all.ru/3.15/library/os.html#os.sep) и [`altsep`](https://python-all.ru/3.15/library/os.html#os.altsep) (если доступны).111112> **См. также**113>114> Методы [`pathlib.PurePath.full_match()`](https://python-all.ru/3.15/library/pathlib.html#pathlib.PurePath.full_match) и [`pathlib.Path.glob()`](https://python-all.ru/3.15/library/pathlib.html#pathlib.Path.glob) , которые вызывают эту функцию для реализации сопоставления с шаблоном и поиска по шаблону (globbing).115116Добавлено в версии 3.13.117118## Примеры119120Рассмотрим каталог, содержащий следующие файлы: `1.gif`, `2.txt`, `card.gif` и подкаталог `sub` , который содержит только файл `3.txt`. [`glob()`](https://python-all.ru/3.15/library/glob.html#module-glob) вернет следующие результаты. Обратите внимание, что все начальные компоненты пути сохраняются.121122```python123>>> import glob124>>> glob.glob('./[0-9].*')125['./1.gif', './2.txt']126>>> glob.glob('*.gif')127['1.gif', 'card.gif']128>>> glob.glob('?.gif')129['1.gif']130>>> glob.glob('**/*.txt', recursive=True)131['2.txt', 'sub/3.txt']132>>> glob.glob('./**/', recursive=True)133['./', './sub/']134```135136Если каталог содержит файлы, начинающиеся с `.`, они не будут сопоставлены по умолчанию. Например, рассмотрим каталог, содержащий `card.gif` и `.card.gif`:137138```python139>>> import glob140>>> glob.glob('*.gif')141['card.gif']142>>> glob.glob('.c*')143['.card.gif']144```145146> **См. также**147>148> Модуль [`fnmatch`](https://python-all.ru/3.15/library/fnmatch.html#module-fnmatch) предоставляет расширение имен файлов в стиле оболочки (не путей).149150> **См. также**151>152> Модуль [`pathlib`](https://python-all.ru/3.15/library/pathlib.html#module-pathlib) предоставляет высокоуровневые объекты путей.153