📅  最后修改于: 2020-04-16 06:00:13             🧑  作者: Mango
该模块用于匹配Unix Shell样式的通配符。fnmatch()将单个文件名与模式进行比较,如果匹配则返回TRUE,否则返回FALSE。
当操作系统使用区分大小写的文件系统时,该比较区分大小写。
Shell样式通配符中使用的特殊字符及其功能为:
元字符应放在方括号中以进行字面匹配。例如,“ [?]”与字符“?”匹配。
fnmatch模块提供的函数
1,fnmatch.fnmatch(filename,pattern):此函数测试给定的文件名字符串是否与模式字符串匹配,并返回布尔值。如果操作系统不区分大小写,则在执行比较之前,两个参数都将被标准化为小写或大写字母。
示例:用于搜索所有以“ fnmatch”开头并以“ .py”结尾的文件的脚本
# Python程序来说明fnmatch.fnmatch(文件名,模式)
import fnmatch
import os
pattern = 'fnmatch_*.py'
print 'Pattern :', pattern
print
files = os.listdir('.')
for name in files:
print 'Filename: %-25s %s' % (name, fnmatch.fnmatch(name, pattern)
输出:
$ Python fnmatch_fnmatch.py
Pattern : fnmatch_*.py
Filename: __init__.py False
Filename: fnmatch_filter.py True
Filename: fnmatch_fnmatch.py True
Filename: fnmatch_fnmatchcase.py True
Filename: fnmatch_translate.py True
Filename: index.rst False
2. fnmatch.fnmatchcase(filename,pattern):此函数执行区分大小写的比较,并测试给定的文件名字符串是否与模式字符串匹配,并返回布尔值。
示例:区分大小写的比较脚本,无论文件系统和操作系统设置如何。
# Python程序来说明fnmatch.fnmatchcase(文件名,模式)
import fnmatch
import os
pattern = 'FNMATCH_*.PY'
print 'Pattern :', pattern
print
files = os.listdir('.')
for name in files:
print 'Filename: %-25s %s' % (name, fnmatch.fnmatchcase(name, pattern))
输出:
$ Python fnmatch_fnmatchcase.py
Pattern : FNMATCH_*.PY
Filename: __init__.py False
Filename: fnmatch_filter.py False
Filename: FNMATCH_FNMATCH.PY True
Filename: fnmatch_fnmatchcase.py False
Filename: fnmatch_translate.py False
Filename: index.rst False
3,fnmatch.filter(names,pattern):此函数返回函数中传递的与给定模式匹配的名称列表的子集。
示例:按多个文件扩展名过滤文件。
# Python程序来说明fnmatch.filter(名称,模式)
import fnmatch
import os
pattern = 'fnmatch_*.py'
print 'Pattern :', pattern
files = os.listdir('.')
print 'Files :', files
print 'Matches :', fnmatch.filter(files, pattern)
输出:
$ Python fnmatch_filter.py
Pattern : fnmatch_*.py
Files : ['__init__.py', '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']
4,fnmatch.translate(pattern):此函数返回转换为正则表达式,并与re.match()一起使用的shell样式模式。
# Python程序来说明fnmatch.translate(pattern)
import fnmatch, re
regex = fnmatch.translate('*.txt')
reobj = re.compile(regex)
print(regex)
print(reobj.match('foobar.txt'))
输出:
'(?s:.*\\.txt)\\Z'
_sre.SRE_Match object; span=(0, 10), match='foobar.txt'