fnmatch.md
1> **Источник:** https://python-all.ru/3.2/library/fnmatch.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 10.7. [`fnmatch`](https://python-all.ru/3.2/library/fnmatch.html#module-fnmatch) – сопоставление имён файлов по шаблону Unix89**Исходный код:** [Lib/fnmatch.py](https://python-all.ru/src/3.2/Lib/fnmatch.py)1011---1213Этот модуль обеспечивает поддержку подстановочных знаков в стиле оболочки Unix, которые *не* являются тем же, что и регулярные выражения (документированные в модуле [`re`](https://python-all.ru/3.2/library/re.html#module-re)). Специальные символы, используемые в подстановочных знаках в стиле оболочки:1415| Шаблон | Значение |16| --- | --- |17| `*` | соответствует всему |18| `?` | соответствует одному любому символу |19| `[seq]` | соответствует любому символу из *seq* |20| `[!seq]` | соответствует любому символу не из *seq* |2122Для точного совпадения заключите метасимволы в скобки. Например, `'[?]'` соответствует символу `'?'`.2324Обратите внимание, что разделитель имен файлов (`'/'` в Unix) *не* является специальным для этого модуля. См. модуль [`glob`](https://python-all.ru/3.2/library/glob.html#module-glob) для расширения путей ([`glob`](https://python-all.ru/3.2/library/glob.html#module-glob) использует [`fnmatch()`](https://python-all.ru/3.2/library/fnmatch.html#module-fnmatch) для сопоставления сегментов путей). Аналогично, имена файлов, начинающиеся с точки, не являются специальными для этого модуля и сопоставляются с `*` и `?` шаблонами.2526#### `fnmatch.fnmatch(filename, pattern)`2728Проверяет, соответствует ли строка *filename* строке *pattern*, возвращая [`True`](https://python-all.ru/3.2/library/constants.html#True) или [`False`](https://python-all.ru/3.2/library/constants.html#False). Если операционная система нечувствительна к регистру, оба параметра будут приведены к нижнему или верхнему регистру перед выполнением сравнения. Для регистрозависимого сравнения можно использовать [`fnmatchcase()`](https://python-all.ru/3.2/library/fnmatch.html#fnmatch.fnmatchcase), независимо от того, является ли это стандартным для операционной системы.2930Этот пример выведет все имена файлов в текущем каталоге с расширением `.txt`:3132```python33import fnmatch34import os3536for file in os.listdir('.'):37 if fnmatch.fnmatch(file, '*.txt'):38 print(file)39```4041#### `fnmatch.fnmatchcase(filename, pattern)`4243Проверяет, соответствует ли *filename* *pattern*, возвращая [`True`](https://python-all.ru/3.2/library/constants.html#True) или [`False`](https://python-all.ru/3.2/library/constants.html#False); сравнение чувствительно к регистру.4445#### `fnmatch.filter(names, pattern)`4647Возвращает подмножество списка *names*, которые соответствуют *pattern*. Это то же самое, что `[n for n in names if fnmatch(n, pattern)]`, но реализовано более эффективно.4849#### `fnmatch.translate(pattern)`5051Возвращает *pattern* в стиле оболочки, преобразованный в регулярное выражение.5253Пример:5455```python56>>> import fnmatch, re57>>>58>>> regex = fnmatch.translate('*.txt')59>>> regex60'.*\\.txt$'61>>> reobj = re.compile(regex)62>>> reobj.match('foobar.txt')63<_sre.SRE_Match object at 0x...>64```6566> **См. также**67>68> **Модуль [`glob`](https://python-all.ru/3.2/library/glob.html#module-glob)**69>70> Раскрытие путей в стиле оболочки Unix.71