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) -
Создаёт список из тех элементов итерируемого объекта 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'>
См. также
-
Moduleglob -
Расширение путей в стиле оболочки Unix.
© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/library/fnmatch.html