fnmatch – сопоставление с шаблонами имён файлов в стиле Unix¶fnmatch – Unix filename pattern matching
Исходный код: Lib/fnmatch.py
Этот модуль обеспечивает поддержку шаблонов с подстановочными символами в стиле оболочки Unix, которые не совпадают с регулярными выражениями (документированными в модуле re).
Специальные символы, используемые в шаблонах оболочки:
Шаблон |
Значение |
|---|---|
|
соответствует всему |
|
соответствует одному любому символу |
|
соответствует любому символу из 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.