11.8. fnmatch — Unix 文件名模式匹配 — Python 文档

来自菜鸟教程
Python/docs/3.6/library/fnmatch
跳转至:导航、​搜索

11.8. 匹配 — Unix 文件名模式匹配

源代码: :source:`Lib/fnmatch.py`


此模块提供对 Unix shell 样式通配符的支持,这些通配符 与正则表达式(记录在 re 模块中)相同。 shell 样式通配符中使用的特殊字符是:

图案 意义
* 匹配一切
? 匹配任何单个字符
[seq] 匹配 seq 中的任何字符
[!seq] 匹配不在 seq 中的任何字符

对于文字匹配,将元字符括在方括号中。 例如,'[?]' 匹配字符 '?'

请注意,文件名分隔符(Unix 上的 '/')是 不是该模块特有的 。 有关路径名扩展,请参阅模块 globglob 使用 filter() 来匹配路径名段)。 类似地,以句点开头的文件名对于这个模块来说也不是特别的,并且由 *? 模式匹配。

fnmatch.fnmatch(filename, pattern)

测试 filename 字符串是否与 pattern 字符串匹配,返回 TrueFalse。 这两个参数都使用 os.path.normcase() 进行了大小写标准化。 fnmatchcase() 可用于执行区分大小写的比较,无论这是否是操作系统的标准。

本示例将打印当前目录中所有扩展名为 .txt 的文件名:

import fnmatch
import os

for file in os.listdir('.'):
    if fnmatch.fnmatch(file, '*.txt'):
        print(file)
fnmatch.fnmatchcase(filename, pattern)
测试 filename 是否匹配 pattern,返回 TrueFalse; 比较区分大小写,不适用 os.path.normcase()
fnmatch.filter(names, pattern)
返回匹配 patternnames 列表的子集。 它与 [n for n in names if fnmatch(n, pattern)] 相同,但实现起来更高效。
fnmatch.translate(pattern)

返回转换为正则表达式的 shell 样式 pattern 以与 re.match() 一起使用。

例子:

>>> import fnmatch, re
>>>
>>> regex = fnmatch.translate('*.txt')
>>> regex
'(?s:.*\\.txt)\\Z'
>>> reobj = re.compile(regex)
>>> reobj.match('foobar.txt')
<_sre.SRE_Match object; span=(0, 10), match='foobar.txt'>

也可以看看

模块 glob
Unix shell 风格的路径扩展。