Модуль Python в неделю | fnmatch

Python Язык программирования

Адрес столбца:Один модуль 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

Оригинальная ссылка:

Дешевый Mo Corruption.com/3/FN match/i…