You are here:  Home » Python » fnmatch-Unix文件名模式匹配(8)Python文件和目录访问模块(必读进阶Python教程)(参考资料)

该模块提供用于Unix shell风格的通配符,这是支持一样的正则表达式(这是中记录re模块)。shell样式通配符中使用的特殊字符是:

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

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

请注意,文件名分隔符('/'在Unix上)对于此模块并不特殊。请参阅模块glob以了解路径名扩展(glob用于filter()匹配路径名段)。同样,以句点开头的文件名对于此模块并不特殊,并且与*? 模式匹配。

fnmatch.fnmatch文件名模式
测试文件名字符串是否与模式字符串匹配,返回 TrueFalse。使用两个参数进行大小写归一化os.path.normcase()fnmatchcase()可以用来执行区分大小写的比较,无论这是否是操作系统的标准。

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

import fnmatch
import os

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

 

fnmatch.fnmatchcase文件名模式
测试文件名是否匹配模式,返回True或 False; 比较区分大小写,不适用 os.path.normcase()
fnmatch.filter名称模式
返回与pattern匹配的名称列表的子集。它与之相同 ,但实施效率更高。[n for n in names if fnmatch(n,pattern)]
fnmatch.translate模式
返回转换为正则表达式的shell样式模式以使用with 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风格的路径扩展。