Spec-Zone.ru › Python 3.14

fnmatch — сопоставление шаблонов имён файлов в Unix

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

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

Шаблон

Значение

*

соответствует чему угодно

?

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

[seq]

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

[!seq]

соответствует любому символу, не входящему в seq

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

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

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

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

fnmatch.filterfalse(names, pat)

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

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

fnmatch.translate(pat)

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

Пример:

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

См. также

Module glob

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

© 2001 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.14/library/fnmatch.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API