fnmatch.md
1> **Источник:** https://python-all.ru/3.0/library/fnmatch.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `fnmatch` – сопоставление имён файлов с шаблонами Unix89Этот модуль обеспечивает поддержку подстановочных знаков в стиле оболочки Unix, которые *не* являются тем же, что и регулярные выражения (документированные в модуле [`re`](https://python-all.ru/3.0/library/re.html#module-re)). Специальные символы, используемые в подстановочных знаках в стиле оболочки:1011| Шаблон | Значение |12| --- | --- |13| `*` | соответствует всему |14| `?` | соответствует одному любому символу |15| `[seq]` | соответствует любому символу из *seq* |16| `[!seq]` | соответствует любому символу не из *seq* |1718Обратите внимание, что разделитель имен файлов (`'/'` в Unix) *не* является специальным для этого модуля. См. модуль [`glob`](https://python-all.ru/3.0/library/glob.html#module-glob) для расширения путей ([`glob`](https://python-all.ru/3.0/library/glob.html#module-glob) использует [`fnmatch()`](https://python-all.ru/3.0/library/fnmatch.html#fnmatch.fnmatch) для сопоставления сегментов путей). Аналогично, имена файлов, начинающиеся с точки, не являются специальными для этого модуля и сопоставляются с `*` и `?` шаблонами.1920#### `[fnmatch.fnmatch]fnmatch.fnmatch(filename, pattern)`2122Проверяет, соответствует ли строка *filename* шаблону *pattern*, возвращая true или false. Если операционная система не учитывает регистр, оба параметра приводятся к нижнему или верхнему регистру перед выполнением сравнения. Если требуется сравнение с учётом регистра вне зависимости от того, является ли это стандартным для вашей операционной системы, используйте вместо этого [`fnmatchcase()`](https://python-all.ru/3.0/library/fnmatch.html#fnmatch.fnmatchcase).2324Этот пример выведет все имена файлов в текущем каталоге с расширением `.txt`:2526```python27import fnmatch28import os2930for file in os.listdir('.'):31 if fnmatch.fnmatch(file, '*.txt'):32 print(file)33```3435#### `[fnmatch.fnmatchcase]fnmatch.fnmatchcase(filename, pattern)`3637Проверяет, соответствует ли3839*filename*4041шаблону4243*pattern*4445, возвращая true или false; сравнение выполняется с учётом регистра.4647#### `[fnmatch.filter]fnmatch.filter(names, pattern)`4849Возвращает подмножество списка5051*names*5253, которые соответствуют5455*pattern*5657. Это то же самое, что5859`[n for n in names if fnmatch(n, pattern)]`6061, но реализовано более эффективно.6263#### `[fnmatch.translate]fnmatch.translate(pattern)`6465Возвращает *pattern* в стиле оболочки, преобразованный в регулярное выражение.6667Пример:6869```python70>>> import fnmatch, re71>>>72>>> regex = fnmatch.translate('*.txt')73>>> regex74'.*\\.txt$'75>>> reobj = re.compile(regex)76>>> print(reobj.match('foobar.txt'))77<_sre.SRE_Match object at 0x...>78```7980> **См. также**81>82> **Модуль [`glob`](https://python-all.ru/3.0/library/glob.html#module-glob)**83>84> Раскрытие путей в стиле оболочки Unix.85