fnmatch
— Соответствие шаблону имени файла Unix¶
Исходный код: Lib/fnmatch.py
Модуль обеспечивает поддержку подстановочных знаков в стиле оболочки Unix,
которые не совпадают с регулярными выражениями (которые
задокументированы в модуле re
). Специальные символы используемый в
подстановочных знаках оболочечного стиля:
Шаблон | Значение |
---|---|
* |
соответствует всему |
? |
соответствует любому единичному символу |
[seq] |
соответствует любому символу в seq |
[!seq] |
соответствует любому символу не в seq |
Для совпадения литерал заключите мета-символы в скобки. Например,
'[?]'
соответствует символ '?'
.
Обратите внимание, что сепаратор имени файла ('/'
в Unix) является
специальным предложением не к этому модулю. См. модуль glob
для
расширения имени пути (glob
использует filter()
для сопоставления
сегментов имени пути). Аналогично, имена файлов, начинающиеся с периода, не
являются специальными для этого модуля и соответствуют шаблонам *
и
?
.
-
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 '(?s:.*\\.txt)\\Z' >>> reobj = re.compile(regex) >>> reobj.match('foobar.txt') <re.Match object; span=(0, 10), match='foobar.txt'>
См.также
- Модуль
glob
- Расширение пути в стиле оболочки Unix.