Python中的Unix文件名模式匹配(fnmatch)
UnixShell命令行中使用的通配符模式与正则表达式语法不同。在Python的标准库中,fnmatch模块提供了Unix通配符模式。
在fnmatch模块中定义了以下功能
fnmatch()
此功能需要两个参数-文件名和字符的字符串模式。文件名与给定的模式匹配,函数返回True或False。
以下示例列出了与当前目录中的模式“*.py”匹配的所有文件。
>>> import glob,fnmatch
>>> for files in (glob.glob('*.*')):
if (fnmatch.fnmatch(files, "*.py")):
print (files)fnmatchcase()
此功能类似于fnmatch()。但是,此功能对模式与文件名进行区分大小写的匹配。
在以下示例中,所有名称以'l'和'.py'扩展名开头的文件都首先收集在文件列表对象中。该fnmatch()方法仅用于打印以“lo”字符开头的名称。
>>> files=glob.glob("l*.*")
>>> files
['LICENSE.txt', 'lines.txt', 'listwidget.ui', 'lo1.ui', 'lo2.ui', 'lo3.ui', 'logo.png', 'logo.svg', 'lw.ui']
>>> for file in files:
if fnmatch.fnmatchcase(file,"lo*.*")==True:
print (file)
lo1.ui
lo2.ui
lo3.ui
logo.png
logo.svg过滤()
此函数仅返回名称与给定pattern参数匹配的文件。
以下语句返回当前目录中所有扩展名为'.txt'的文件的列表。
>>> fnmatch.filter(files,"*.txt") ['a!.txt', 'data().txt', 'dict.txt', 'json.txt', 'LICENSE.txt', 'lines.txt', 'msg.txt', 'NEWS.txt', 'test.txt', 'zen.txt', 'zen1.txt', 'zenbak.txt']
翻译()
此功能对于将UNIX样式模式转换为相应的RegEx形式很有用。translate()函数的返回值应使用compile()re模块的函数以正则表达式转换。然后将其用于匹配模式。
>>> pattern="*.txt"
>>> import re
>>> reg=fnmatch.translate(pattern)
>>> reg
'(?s:.*\\.txt)\\Z'
>>> rec=re.compile(reg)
>>> for file in glob.glob("*.*"):
if re.match(rec,file):
print (file)在本文中,已经解释了fnmatch模块中的功能。