Адрес столбца:Один модуль Python в неделю
В то же время, вы также можете обратить внимание на мой публичный аккаунт WeChat AlwaysBeta, вас ждет более интересный контент.
Модуль fnmatch в основном используется для сравнения имен файлов с использованием шаблонов в стиле glob, используемых оболочкой Unix.
простое совпадение
fnmatch()Сравнивает одно имя файла с шаблоном и возвращает логическое значение, чтобы проверить, совпадают ли они. Сравнения чувствительны к регистру, когда операционная система использует файловую систему с учетом регистра.
import fnmatch
import os
pattern = 'fnmatch_*.py'
print('Pattern :', pattern)
print()
files = os.listdir('.')
for name in sorted(files):
print('Filename: {:<25} {}'.format(name, fnmatch.fnmatch(name, pattern)))
# output
# Pattern : fnmatch_*.py
#
# Filename: fnmatch_filter.py True
# Filename: fnmatch_fnmatch.py True
# Filename: fnmatch_fnmatchcase.py True
# Filename: fnmatch_translate.py True
# Filename: index.rst False
В этом примере шаблон соответствует всему, что начинается с'fnmatch_'начиная с'.py'конечный файл.
Чтобы принудительно выполнить сравнение с учетом регистра независимо от файловой системы и настроек ОС, используйтеfnmatchcase().
import fnmatch
import os
pattern = 'FNMATCH_*.PY'
print('Pattern :', pattern)
print()
files = os.listdir('.')
for name in sorted(files):
print('Filename: {:<25} {}'.format(name, fnmatch.fnmatchcase(name, pattern)))
# output
# Pattern : FNMATCH_*.PY
#
# Filename: fnmatch_filter.py False
# Filename: fnmatch_fnmatch.py False
# Filename: fnmatch_fnmatchcase.py False
# Filename: fnmatch_translate.py False
# Filename: index.rst False
Поскольку система OS X, используемая для тестирования этой программы, использует файловую систему с учетом регистра, никакие файлы не соответствуют измененному шаблону.
фильтр
Чтобы проверить последовательности имен файлов, используйтеfilter(), который возвращается сpatternСписок имен для сопоставления.
import fnmatch
import os
import pprint
pattern = 'fnmatch_*.py'
print('Pattern :', pattern)
files = list(sorted(os.listdir('.')))
print('\nFiles :')
pprint.pprint(files)
print('\nMatches :')
pprint.pprint(fnmatch.filter(files, pattern))
# output
# Pattern : fnmatch_*.py
#
# Files :
# ['fnmatch_filter.py',
# 'fnmatch_fnmatch.py',
# 'fnmatch_fnmatchcase.py',
# 'fnmatch_translate.py',
# 'index.rst']
#
# Matches :
# ['fnmatch_filter.py',
# 'fnmatch_fnmatch.py',
# 'fnmatch_fnmatchcase.py',
# 'fnmatch_translate.py']
В этом примереfilter()Возвращает список имен исходных файлов примеров, связанных с этим разделом.
режим перевода
Внутренний,fnmatchбудетglobРежим преобразуется в регулярные выражения и используетreМодули сравнивают имена и схемы.translate()функция состоит в том, чтобыglobОбщественный API для преобразования шаблонов на регулярные выражения.
import fnmatch
pattern = 'fnmatch_*.py'
print('Pattern :', pattern) # Pattern : fnmatch_*.py
print('Regex :', fnmatch.translate(pattern)) # Regex : (?s:fnmatch_.*\.py)\Z
Оригинальная ссылка: