On this page
10.8. fnmatch — Unix 文件名模式匹配
源代码: Lib/fnmatch.py
此模块提供对 Unix Shell 样式通配符的支持,这些通配符与正则表达式(在re模块中有说明)不同。 Shell 样式通配符中使用的特殊字符为:
Pattern | Meaning |
---|---|
* |
matches everything |
? |
匹配任何单个字符 |
[seq] |
匹配* seq *中的任何字符 |
[!seq] |
匹配* seq *中以外的任何字符 |
对于 Literals 匹配,请将元字符括在方括号中。例如,'[?]'
与字符'?'
匹配。
请注意,文件名分隔符(在 Unix 上为'/'
)对于该模块不是*特殊的。请参阅模块glob中的路径名扩展(glob使用filter()匹配路径名段)。同样,以句点开头的文件名在该模块中不是特殊的,并且由*
和?
模式匹配。
fnmatch.
fnmatch
(* filename , pattern *)- 测试* filename 字符串是否与 pattern *字符串匹配,返回True或False。两个参数都使用os.path.normcase()进行大小写规范化。 fnmatchcase()可用于执行区分大小写的比较,而不管这对于 os 是否是标准的。
本示例将打印当前目录中 extensions 为.txt
的所有文件名:
import fnmatch
import os
for file in os.listdir('.'):
if fnmatch.fnmatch(file, '*.txt'):
print file
fnmatch.
fnmatchcase
(* filename , pattern *)- 测试* filename 是否匹配 pattern *,返回True或False;比较是区分大小写的,不适用于os.path.normcase()。
fnmatch.
filter
(* names , pattern *)- 返回与* pattern 匹配的 names 列表的子集。它与
[n for n in names if fnmatch(n, pattern)]
相同,但实施效率更高。
- 返回与* pattern 匹配的 names 列表的子集。它与
2.2 版中的新Function。
fnmatch.
translate
(模式)- 返回转换为正则表达式以与re.match()一起使用的 shell 样式* pattern *。
Example:
>>> import fnmatch, re
>>>
>>> regex = fnmatch.translate('*.txt')
>>> regex
'.*\\.txt\\Z(?ms)'
>>> reobj = re.compile(regex)
>>> reobj.match('foobar.txt')
<_sre.SRE_Match object at 0x...>
See also
Module glob
Unix shell 样式的路径扩展。