fnmatch ---Unix文件名模式匹配

源代码: Lib/fnmatch.py


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

模式

意义

*

匹配所有内容

?

匹配任何单个字符

[seq]

匹配中的任何字符 seq

[!seq]

匹配不在中的任何字符 seq

对于文本匹配,请将元字符括在括号中。例如, '[?]' 与角色匹配 '?' .

注意,文件名分隔符 ('/' 在UNIX上 not 此模块专用。参阅模块 glob 用于路径名扩展 (glob 使用 filter() 匹配路径名段)。类似地,以句点开头的文件名对于此模块不是特殊的,并且与 *? 模式。

fnmatch.fnmatch(filename, pattern)

测试 filename 字符串与 模式 字符串,返回 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 比赛 模式 归来 TrueFalse ;比较区分大小写,不适用 os.path.normcase() .

fnmatch.filter(names, pattern)

从可迭代元素的这些元素构造一个列表 姓名 那场比赛 图案 。它与以下内容相同 [n for n in names if fnmatch(n, pattern)] ,但实施效率更高。

fnmatch.translate(pattern)

返回外壳样式 模式 转换为正则表达式以便与一起使用 re.match() .

例子:

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

参见

模块 glob

Unix Shell样式的路径扩展。