fnmatch
— Сопоставление образцов имен файлов Unix¶
Источник: Lib/fnmatch.py
Этот модуль обеспечивает поддержку подстановочных знаков в стиле оболочки Unix, которые не то же самое, что регулярные выражения (которые документированы в модуле re
). В подстановочных знаках в стиле shell используются следующие специальные символы:
Узор |
Значение |
---|---|
|
подходит ко всему |
|
соответствует любому одиночному символу |
|
соответствует любому символу в seq. |
|
соответствует любому символу, не входящему в seq. |
Для буквального совпадения оберните метасимволы в скобки. Например, '[?]'
соответствует символу '?'
.
Обратите внимание, что разделитель имен файлов ('/'
в Unix) не является специальным для этого модуля. Для расширения имени пути смотрите модуль glob
(glob
использует filter()
для сопоставления сегментов имени пути). Аналогично, имена файлов, начинающиеся с точки, не являются специальными для этого модуля и соответствуют шаблонам *
и ?
.
Также обратите внимание, что functools.lru_cache()
с maxsize, равным 32768, используется для кэширования скомпилированных шаблонов regex в следующих функциях: 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 имена, которые соответствуют шаблону pat. Это то же самое, что и
[n for n in names if fnmatch(n, pat)]
, но реализовано более эффективно.
- fnmatch.translate(pat)¶
Возвращает шаблон в стиле shell 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.