10.8. fnmatch — Unix 文件名模式匹配

源代码: Lib/fnmatch.py


此模块提供对 Unix Shell 样式通配符的支持,这些通配符与正则表达式(在re模块中有说明)不同。 Shell 样式通配符中使用的特殊字符为:

PatternMeaning
*matches everything
?匹配任何单个字符
[seq]匹配* seq *中的任何字符
[!seq]匹配* seq *中以外的任何字符

对于 Literals 匹配,请将元字符括在方括号中。例如,'[?]'与字符'?'匹配。

请注意,文件名分隔符(在 Unix 上为'/')对于该模块不是*特殊的。请参阅模块glob中的路径名扩展(glob使用filter()匹配路径名段)。同样,以句点开头的文件名在该模块中不是特殊的,并且由*?模式匹配。

  • fnmatch. fnmatch(* filename pattern *)
    • 测试* filename 字符串是否与 pattern *字符串匹配,返回TrueFalse。两个参数都使用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 *)

  • fnmatch. filter(* names pattern *)

    • 返回与* pattern 匹配的 names 列表的子集。它与[n for n in names if fnmatch(n, pattern)]相同,但实施效率更高。

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 样式的路径扩展。