在 Python2标准库之glob--Unix风格的路径匹配 一文中提到的 glob 模块在进行模式匹配时,调用的就是本文要介绍的 fnmatch 模块。
本模块提供了对 Unix Shell 风格的通配符的支持。和正则表达式类似,但并不一样。它支持的四种通配符模式,在 glob 一文中已有介绍,这里不再赘述。
测试 filename 字符串是否匹配 pattern 字符串,匹配则返回 True,否则返回 False. 如果操作系统对文件名是不区分大小写的,那么在进行比较匹配时两个参数都会被归一为大写或者小写。
下面的例子将会打印出当前目录中扩展名为 .txt
的所有文件名:
1 2 3 4 5 6 | import fnmatch import os for file in os.listdir('.'): if fnmatch.fnmatch(file, '*.txt'): print file |
测试 filename 字符串是否匹配 pattern 字符串,匹配则返回 True,否则返回 False. 此匹配是大小写敏感的。
返回列表 names 中匹配模式 pattern 的子集。和 [n for n in names if fnmatch(n, pattern)]
的效果一样,但效率更高。
将 Shell 风格的模式 pattern 转换成正则表达式。
1 2 3 4 5 6 7 8 | >>> import fnmatch, re >>> >>> regex = fnmatch.translate('*.txt') >>> regex '.*\\.txt$' >>> reobj = re.compile(regex) >>> reobj.match('foobar.txt') <_sre.SRE_Match object at 0x...> |
此模块一般和遍历目录树的 os.walk()
或 os.listdir()
配合使用。
1 2 3 4 5 6 | import os, fnmatch for root, dirs, files in os.walk(DIRECTORY): for file in files: if fnmatch.fnmatch(file, PATTERN): print file |
本作品由 Yysfire 创作,采用进行许可。转载时请在显著位置标明本文永久链接:
http://yysfire.github.io/python/python2-standard-library-fnmatch.html