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