fnmatch
— Unix filename pattern matching¶
Вихідний код: Lib/fnmatch.py
Цей модуль підтримує символи підстановки у стилі оболонки Unix, які не відрізняються від регулярних виразів (які задокументовані в модулі re
). Спеціальні символи, які використовуються в символах підстановки у стилі оболонки:
Візерунок |
Значення |
---|---|
|
відповідає всьому |
|
відповідає будь-якому окремому символу |
|
відповідає будь-якому символу в seq |
|
відповідає будь-якому символу не в seq |
Для буквального збігу заберіть метасимволи в дужки. Наприклад, ''[?]'
відповідає символу ''?'
.
Зауважте, що роздільник імен файлів ('/'
в Unix) не є особливим для цього модуля. Дивіться модуль glob
для розширення імені шляху (glob
використовує filter()
для відповідності сегментам імені шляху). Подібним чином назви файлів, що починаються з крапки, не є спеціальними для цього модуля та відповідають шаблонам *
і ?
.
Also note that functools.lru_cache()
with the maxsize of 32768 is used to
cache the compiled regex patterns in the following functions: fnmatch()
,
fnmatchcase()
, filter()
.
- fnmatch.fnmatch(name, pat)¶
Test whether the filename string name matches the pattern string pat, returning
True
orFalse
. Both parameters are case-normalized usingos.path.normcase()
.fnmatchcase()
can be used to perform a case-sensitive comparison, regardless of whether that’s standard for the operating system.У цьому прикладі буде надруковано всі імена файлів у поточному каталозі з розширенням
.txt
:import fnmatch import os for file in os.listdir('.'): if fnmatch.fnmatch(file, '*.txt'): print(file)
- fnmatch.fnmatchcase(name, pat)¶
Test whether the filename string name matches the pattern string pat, returning
True
orFalse
; the comparison is case-sensitive and does not applyos.path.normcase()
.
- fnmatch.filter(names, pat)¶
Construct a list from those elements of the iterable names that match pattern pat. It is the same as
[n for n in names if fnmatch(n, pat)]
, but implemented more efficiently.
- fnmatch.translate(pat)¶
Return the shell-style pattern pat converted to a regular expression for using with
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.