fnmatch
— Соответствие шаблону имени файла Unix
Данный модуль обеспечивает поддержку подстановочных знаков в стиле оболочки
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.