11.8. fnmatch
—— Unix文件名模式的匹配¶
源代码: Lib / fnmatch.py
此模块支持Unix shell样式通配符,不是与正则表达式(在re
模块中记录)相同。shell样式通配符中使用的特殊字符是:
模式 | 含义 |
---|---|
* | 匹配一切 |
? | 匹配任何单个字符 |
[seq] | 匹配seq中的任何字符 |
[!seq] | 匹配不在seq中的任何字符 |
对于字面值匹配,将元字符包裹在括号中。例如,'[?]'
匹配字符'?'
。
请注意,文件名分隔符(Unix上的'/'
)是而不是特殊于此模块。有关路径名扩展(glob
使用fnmatch()
匹配路径名段),请参见模块glob
。类似地,以句点开头的文件名对于此模块不是特殊的,并且由*
和?
模式。
-
fnmatch.
fnmatch
(filename, pattern)¶ 测试filename字符串是否匹配模式字符串,返回
True
或False
。如果操作系统不区分大小写,则在执行比较之前,两个参数都将归一化为所有大小写。fnmatchcase()
可用于执行区分大小写的比较,无论是否为操作系统的标准。此示例将使用扩展名
.txt
打印当前目录中的所有文件名:import fnmatch import os for file in os.listdir('.'): if fnmatch.fnmatch(file, '*.txt'): print(file)
-
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样式的路径扩展。