fnmatch
— Unix 文件名模式匹配¶
源代码: Lib/fnmatch.py
此模块提供对 Unix shell 风格通配符的支持,它们与正则表达式(在 re
模块中记录)不 相同。shell 风格通配符中使用的特殊字符是
模式 |
含义 |
---|---|
|
匹配所有内容 |
|
匹配任意单个字符 |
|
匹配 seq 中的任意字符 |
|
匹配不在 seq 中的任意字符 |
对于字面匹配,请将元字符括在方括号中。例如,'[?]'
匹配字符 '?'
。
请注意,文件名分隔符(Unix 上为 '/'
)对于此模块不是特殊的。有关路径名扩展,请参阅模块 glob
(glob
使用 filter()
来匹配路径名段)。类似地,以句点开头的文件名对于此模块也不是特殊的,并且会通过 *
和 ?
模式进行匹配。
另请注意,functools.lru_cache()
的 maxsize 为 32768,用于缓存以下函数中的已编译正则表达式模式:fnmatch()
、fnmatchcase()
、filter()
。
- 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)¶
从与模式 pat 匹配的 可迭代对象 names 的元素构造一个列表。它与
[n for n in names if fnmatch(n, pat)]
相同,但实现效率更高。
- fnmatch.translate(pat)¶
返回转换为正则表达式的 shell 风格模式 pat,以便与
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 风格的路径扩展。