Spec-Zone.ru › Python 3.13

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

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

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

Шаблон

Значение

*

сопоставляет все

?

сопоставляет любой одиночный символ

[seq]

сопоставляет любой символ в seq

[!seq]

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

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

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

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

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.translate(pat)

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

Пример:

>>> 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–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/library/fnmatch.html

Spec-Zone.ru

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