Spec-Zone.ru › Python 3.5

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

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

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

Шаблон Значение
* соответствует всему
? соответствует любому символу
[seq] соответствует любому символу в seq
[!seq] соответствует любому символу, не входящему в seq

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

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

fnmatch.fnmatch(filename, pattern)

Проверяет, соответствует ли строка filename строке pattern, возвращая 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(filename, pattern)

Проверяет, соответствует ли filename шаблону pattern, возвращая True или False; сравнение чувствительно к регистру и не применяет os.path.normcase().

fnmatch.filter(names, pattern)

Возвращает подмножество списка names, которые соответствуют pattern. Это то же самое, что [n for n in names if fnmatch(n, pattern)], но реализовано более эффективно.

fnmatch.translate(pattern)

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

Пример:

>>> import fnmatch, re
>>>
>>> regex = fnmatch.translate('*.txt')
>>> regex
'.*\\.txt\\Z(?ms)'
>>> reobj = re.compile(regex)
>>> reobj.match('foobar.txt')
<_sre.SRE_Match object; span=(0, 10), match='foobar.txt'>

См. также

Module glob
Расширение путей в стиле оболочки Unix.

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

Spec-Zone.ru

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