fnmatch.md
1> **Источник:** https://python-all.ru/3.13/library/fnmatch.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `fnmatch` – сопоставление с шаблонами имён файлов в стиле Unix89**Исходный код:** [Lib/fnmatch.py](https://python-all.ru/src/3.13/Lib/fnmatch.py)1011---1213Этот модуль обеспечивает поддержку шаблонов с подстановочными символами в стиле оболочки Unix, которые *не* совпадают с регулярными выражениями (документированными в модуле [`re`](https://python-all.ru/3.13/library/re.html#module-re)). Специальные символы, используемые в шаблонах оболочки:1415| Шаблон | Значение |16| --- | --- |17| `*` | соответствует всему |18| `?` | соответствует одному любому символу |19| `[seq]` | соответствует любому символу из *seq* |20| `[!seq]` | соответствует любому символу не из *seq* |2122Для точного совпадения заключите метасимволы в скобки. Например, `'[?]'` соответствует символу `'?'`.2324Обратите внимание, что разделитель имён файлов (`'/'` в Unix) *не* является специальным для этого модуля. Смотрите модуль [`glob`](https://python-all.ru/3.13/library/glob.html#module-glob) для раскрытия путей (`glob` использует [`filter()`](https://python-all.ru/3.13/library/fnmatch.html#fnmatch.filter) для сопоставления сегментов путей). Аналогично, имена файлов, начинающиеся с точки, не являются специальными для этого модуля и сопоставляются с помощью шаблонов `*` и `?`.2526Если не указано иное, «строка имени файла» и «строка шаблона» относятся к объектам [`str`](https://python-all.ru/3.13/library/stdtypes.html#str) или `ISO-8859-1`, закодированным в [`bytes`](https://python-all.ru/3.13/library/stdtypes.html#bytes). Обратите внимание, что документированные ниже функции не позволяют смешивать шаблон `bytes` с именем файла `str`, и наоборот.2728Наконец, отметьте, что [`functools.lru_cache()`](https://python-all.ru/3.13/library/functools.html#functools.lru_cache) с *maxsize*, равным 32768, используется для кэширования (типизированных) скомпилированных регулярных выражений в следующих функциях: [`fnmatch()`](https://python-all.ru/3.13/library/fnmatch.html#module-fnmatch), [`fnmatchcase()`](https://python-all.ru/3.13/library/fnmatch.html#fnmatch.fnmatchcase), [`filter()`](https://python-all.ru/3.13/library/fnmatch.html#fnmatch.filter).2930#### `fnmatch.fnmatch(name, pat)`3132Проверяет, соответствует ли строка имени файла *name* строке шаблона *pat*, возвращая `True` или `False`. Оба параметра нормализуются по регистру с помощью [`os.path.normcase()`](https://python-all.ru/3.13/library/os.path.html#os.path.normcase). [`fnmatchcase()`](https://python-all.ru/3.13/library/fnmatch.html#fnmatch.fnmatchcase) можно использовать для выполнения регистрозависимого сравнения, независимо от того, является ли это стандартным для операционной системы.3334Этот пример выведет все имена файлов в текущем каталоге с расширением `.txt`:3536```python37import fnmatch38import os3940for file in os.listdir('.'):41 if fnmatch.fnmatch(file, '*.txt'):42 print(file)43```4445#### `fnmatch.fnmatchcase(name, pat)`4647Проверяет, соответствует ли строка имени файла *name* строке шаблона *pat*, возвращая `True` или `False`; сравнение регистрозависимо и не применяет [`os.path.normcase()`](https://python-all.ru/3.13/library/os.path.html#os.path.normcase).4849#### `fnmatch.filter(names, pat)`5051Строит список из тех элементов [iterable](https://python-all.ru/3.13/glossary.html#term-iterable) строк имён файлов *names*, которые соответствуют строке шаблона *pat*. Это то же самое, что `[n for n in names if fnmatch(n, pat)]`, но реализовано более эффективно.5253#### `fnmatch.translate(pat)`5455Возвращает шаблон в стиле оболочки *pat*, преобразованный в регулярное выражение для использования с [`re.match()`](https://python-all.ru/3.13/library/re.html#re.match). Ожидается, что шаблон будет [`str`](https://python-all.ru/3.13/library/stdtypes.html#str).5657Пример:5859```python60>>> import fnmatch, re61>>>62>>> regex = fnmatch.translate('*.txt')63>>> regex64'(?s:.*\\.txt)\\Z'65>>> reobj = re.compile(regex)66>>> reobj.match('foobar.txt')67<re.Match object; span=(0, 10), match='foobar.txt'>68```6970> **См. также**71>72> **Модуль [`glob`](https://python-all.ru/3.13/library/glob.html#module-glob)**73>74> Раскрытие путей в стиле оболочки Unix.75