Unix Shell命令行中使用的通配符模式与正则表达式语法不同。在Python的标准库中,fnmatch模块提供了Unix通配符模式。
在fnmatch模块中定义了以下功能
此功能需要两个参数-文件名和字符的字符串模式。文件名与给定的模式匹配,函数返回True或False。
以下示例列出了与当前目录中的模式“ * .py”匹配的所有文件。
>>> import glob,fnmatch >>> for files in (glob.glob('*.*')): if (fnmatch.fnmatch(files, "*.py")): print (files)
此功能类似于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模块中的功能。