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

fnmatch – сопоставление с шаблонами имён файлов в стиле Unixfnmatch – Unix filename pattern matching

Исходный код: Lib/fnmatch.py


Этот модуль обеспечивает поддержку шаблонов с подстановочными символами в стиле оболочки Unix, которые не совпадают с регулярными выражениями (документированными в модуле re). Специальные символы, используемые в шаблонах оболочки:

Шаблон

Значение

*

соответствует всему

?

соответствует одному любому символу

[seq]

соответствует любому символу из seq

[!seq]

соответствует любому символу не из seq

Для точного совпадения заключите метасимволы в скобки. Например, '[?]' соответствует символу '?'.

Обратите внимание, что разделитель имён файлов ('/' в Unix) не является специальным для этого модуля. Смотрите модуль glob для раскрытия путей (glob использует filter() для сопоставления сегментов путей). Аналогично, имена файлов, начинающиеся с точки, не являются специальными для этого модуля и сопоставляются с помощью шаблонов * и ?.

Если не указано иное, «строка имени файла» и «строка шаблона» относятся к объектам str или ISO-8859-1, закодированным в bytes. Обратите внимание, что документированные ниже функции не позволяют смешивать шаблон bytes с именем файла str, и наоборот.

Наконец, обратите внимание, что @functools.lru_cache с maxsize, равным 32768, используется для кэширования (типизированных) скомпилированных регулярных выражений в следующих функциях: fnmatch(), fnmatchcase(), filter(), filterfalse().

fnmatch.fnmatch(name, pat)

Проверяет, соответствует ли строка имени файла name строке шаблона pat, возвращая True или False. Оба параметра нормализуются по регистру с помощью os.path.normcase(). fnmatchcase() можно использовать для выполнения регистрозависимого сравнения, независимо от того, является ли это стандартным для операционной системы.

Этот пример выведет все имена файлов в текущем каталоге с расширением .txt:

import fnmatch
import os

for file in os.listdir('.'):
    if fnmatch.fnmatch(file, '*.txt'):
        print(file)
fnmatch.fnmatchcase(name, pat)

Проверяет, соответствует ли строка имени файла name строке шаблона pat, возвращая True или False; сравнение регистрозависимо и не применяет os.path.normcase().

fnmatch.filter(names, pat)

Строит список из тех элементов iterable строк имён файлов names, которые соответствуют строке шаблона pat. Это то же самое, что [n for n in names if fnmatch(n, pat)], но реализовано более эффективно.

fnmatch.filterfalse(names, pat)

Строит список из тех элементов iterable строк имён файлов names, которые не соответствуют строке шаблона pat. Это то же самое, что [n for n in names if not fnmatch(n, pat)], но реализовано более эффективно.

Добавлено в версии 3.14.

fnmatch.translate(pat)

Возвращает шаблон в стиле оболочки pat, преобразованный в регулярное выражение для использования с re.prefixmatch(). Ожидается, что шаблон является str.

Пример:

>>> import fnmatch, re
>>>
>>> regex = fnmatch.translate('*.txt')
>>> regex
'(?s:.*\\.txt)\\z'
>>> reobj = re.compile(regex)
>>> reobj.prefixmatch('foobar.txt')
<re.Match object; span=(0, 10), match='foobar.txt'>

См. также

Модуль glob

Раскрытие путей в стиле оболочки Unix.