fnmatch — сопоставление имён файлов по шаблонам Unix
Исходный код: Lib/fnmatch.py
Этот модуль поддерживает подстановочные символы в стиле оболочки Unix, которые не совпадают с регулярными выражениями (описанными в модуле re). Специальные символы, используемые в подстановочных шаблонах в стиле оболочки:
Шаблон | Значение |
|---|---|
| соответствует всему |
| соответствует любому одиночному символу |
| соответствует любому символу из seq |
| соответствует любому символу, которого нет в seq |
Чтобы найти буквальное совпадение, заключите метасимволы в квадратные скобки. Например, '[?]' соответствует символу '?'.
Обратите внимание, что разделитель имён файлов ('/' в Unix) не является специальным символом для этого модуля. Для раскрытия шаблонов путей см. модуль glob (glob использует filter() для сопоставления сегментов пути). Аналогично, имена файлов, начинающиеся с точки, не являются специальными для этого модуля и сопоставляются с шаблонами * и ?.
Если не указано иное, «строка имени файла» и «строка шаблона» означают объекты str или объекты bytes, закодированные в ISO-8859-1. Обратите внимание, что описанные ниже функции не позволяют смешивать шаблон bytes с именем файла str и наоборот.
Наконец, обратите внимание, что 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(). Ожидается, что шаблон будет объектом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'>
См. также
-
Moduleglob -
Раскрытие путей в стиле оболочки Unix.
© 2001–2025 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/library/fnmatch.html