fnmatch — Сопоставление шаблонов имен файлов Unix
Исходный код: Lib/fnmatch.py
Этот модуль предоставляет поддержку шаблонов соответствия Unix-стиля, которые не являются тем же, что и регулярные выражения (которые документированы в модуле re). Специальные символы, используемые в шаблонах соответствия Unix-стиля, это:
Шаблон | Значение |
|---|---|
| соответствует всему |
| соответствует любому одиночному символу |
| соответствует любому символу в 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) -
Создает список из тех элементов iterable names, которые соответствуют pattern. Это то же, что
[n for n in names if fnmatch(n, pattern)], но реализовано более эффективно.
-
fnmatch.translate(pattern) -
Возвращает шаблон Unix-стиля 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'>
См. также
-
Moduleglob -
Расширение путей в стиле оболочки Unix.
© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.8/library/fnmatch.html