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 风格的路径扩展。