📜  fnmatch – Python中的Unix文件名模式匹配

📅  最后修改于: 2020-04-16 06:00:13             🧑  作者: Mango

该模块用于匹配Unix Shell样式的通配符。fnmatch()将单个文件名与模式进行比较,如果匹配则返回TRUE,否则返回FALSE。
当操作系统使用区分大小写的文件系统时,该比较区分大小写。
Shell样式通配符中使用的特殊字符及其功能为:

  • ‘*’–匹配所有内容
  • ‘?’ –匹配任何单个字符
  • ‘[seq]’–匹配seq中的任何字符
  • ‘[!seq]’–匹配不在seq中的任何字符

元字符应放在方括号中以进行字面匹配。例如,“ [?]”与字符“?”匹配。

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'