fnmatch --- Unix 文件名模式匹配¶
源代码: Lib/fnmatch.py
此模块支持 Unix shell 风格的通配符,它与正则表达式(在 re 模块中介绍)并不相同。shell 风格通配符所使用的特殊字符如下:
模式 |
含义 |
|---|---|
|
匹配所有 |
|
匹配任意单个字符 |
|
匹配 seq 中的任意字符 |
|
匹配不在 seq 中的任意字符 |
对于字面值匹配,请将元字符用方括号括起来。例如,'[?]' 匹配字符 '?'。
请注意文件名分隔符(在 Unix 上为 '/')在此模块中没有特殊含义。有关路径名扩展,请参见 glob 模块(glob 使用 filter() 来匹配路径名的各部分)。类似地,以句点开头的文件名在此模块中也没有特殊含义,可由 * 和 ? 模式匹配。
除非另有说明,“文件名字符串”和“模式字符串”指的是 str 或 ISO-8859-1 编码的 bytes 对象。请注意,下面文档中介绍的函数不允许混合使用 bytes 模式和 str 文件名,反之亦然。
最后,请注意,以下函数中使用 maxsize 为 32768 的 functools.lru_cache() 来缓存(已指定类型的)已编译正则表达式模式:fnmatch(), fnmatchcase(), filter(), filterfalse()。
- fnmatch.fnmatch(name, pat)¶
测试文件名字符串 name 是否匹配模式字符串 pat,返回
True或False。两个形参都会使用os.path.normcase()进行大小写规范化。fnmatchcase()可用于执行区分大小写的比较,无论这对于操作系统是否为标准行为。这个例子将打印当前目录下所有扩展名为
.txt的文件名:import fnmatch import os for file in os.listdir('.'): if fnmatch.fnmatch(file, '*.txt'): print(file)
- fnmatch.fnmatchcase(name, pat)¶
测试文件名字符串 name 是否匹配模式字符串 pat,返回
True或False;此比较区分大小写并且不会应用os.path.normcase()。
- fnmatch.filter(names, pat)¶
根据文件名字符串 可迭代对象 names 中能匹配模式字符串 pat 的元素,构建一个列表。这等价于
[n for n in names if fnmatch(n, pat)],但实现效率更高。
- fnmatch.filterfalse(names, pat)¶
根据文件名字符串 可迭代对象 names 中不能匹配模式字符串 pat 的元素,构建一个列表。这等价于
[n for n in names if not fnmatch(n, pat)],但实现效率更高。在 3.14 版本加入。
- fnmatch.translate(pat)¶
返回 shell 风格的模式 pat 转换成的正则表达式,用于
re.match()。该模式应为str。示例
>>> 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 风格的路径扩展。