fnmatch
— зіставлення імен файлів у Unix¶
Вихідний код: Lib/fnmatch.py
Цей модуль підтримує символи підстановки у стилі оболонки Unix, які які не відповідають регулярним виразам (що задокументовані в модулі re
). Спеціальні символи, які використовуються в символах підстановки у стилі оболонки:
Візерунок |
Значення |
---|---|
|
відповідає всьому |
|
відповідає будь-якому окремому символу |
|
відповідає будь-якому символу в seq |
|
відповідає будь-якому символу не в seq |
Для буквального збігу заберіть метасимволи в дужки. Наприклад, ''[?]'
відповідає символу ''?'
.
Зауважте, що роздільник імен файлів ('/'
в Unix) не є особливим для цього модуля. Дивіться модуль glob
для розширення імені шляху (glob
використовує filter()
для відповідності сегментам імені шляху). Подібним чином назви файлів, що починаються з крапки, не є спеціальними для цього модуля та відповідають шаблонам *
і ?
.
Unless stated otherwise, «filename string» and «pattern string» either refer to
str
or ISO-8859-1
encoded bytes
objects. Note that the
functions documented below do not allow to mix a bytes
pattern with
a str
filename, and vice-versa.
Finally, note that functools.lru_cache()
with a maxsize of 32768
is used to cache the (typed) 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 of filename strings names that match the pattern string 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()
. The pattern is expected to be astr
.Приклад:
>>> 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.