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

源代码: Lib / fnmatch.py​​

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

模式含义
*匹配一切
?匹配任何单个字符
[seq]匹配seq中的任何字符
[!seq]匹配不在seq中的任何字符

对于字面值匹配,将元字符包裹在括号中。例如,'[?]'匹配字符'?'

请注意,文件名分隔符(Unix上的'/')是而不是特殊于此模块。有关路径名扩展(glob使用fnmatch()匹配路径名段),请参见模块glob类似地,以句点开头的文件名对于此模块不是特殊的,并且由*?模式。

fnmatch.fnmatch(filename, pattern)

测试filename字符串是否匹配模式字符串,返回TrueFalse如果操作系统不区分大小写,则在执行比较之前,两个参数都将归一化为所有大小写。fnmatchcase()可用于执行区分大小写的比较,无论是否为操作系统的标准。

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

import fnmatch
import os

for file in os.listdir('.'):
    if fnmatch.fnmatch(file, '*.txt'):
        print(file)
fnmatch.fnmatchcase(filename, pattern)

测试filename是否匹配模式,返回TrueFalse;比较是区分大小写的。

fnmatch.filter(names, pattern)

返回与模式匹配的名称列表的子集。It is the same as [n for n in names if fnmatch(n, pattern)], but implemented more efficiently.

fnmatch.translate(pattern)

返回转换为正则表达式的shell样式模式

例:

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

也可以看看

模块glob
Unix shell样式的路径扩展。