• fnmatch —- Unix 文件名模式匹配

    fnmatch —- Unix 文件名模式匹配

    源代码: Lib/fnmatch.py


    此模块提供了 Unix shell 风格的通配符,它们 并不 等同于正则表达式(关于后者的文档参见 re 模块)。 shell 风格通配符所使用的特殊字符如下:

    模式

    含意

    *

    匹配所有

    ?

    匹配任何单个字符

    [seq]

    匹配 seq 中的任何字符

    [!seq]

    匹配任何不在 seq 中的字符

    对于字面值匹配,请将原字符用方括号括起来。 例如,'[?]' 将匹配字符 '?'

    注意文件名分隔符 (Unix 上为 '/') 不是 此模块所特有的。 请参见 glob 模块了解文件名扩展 (glob 使用 filter() 来匹配文件名的各个部分)。 类似地,以一个句点打头的文件名也不是此模块所特有的,可以通过 *? 模式来匹配。

    fnmatch.fnmatch(filename, pattern)

    检测 filename 字符串是否匹配 pattern 字符串,返回 TrueFalse。 两个形参都会使用 os.path.normcase() 进行大小写正规化。 fnmatchcase() 可被用于执行大小写敏感的比较,无论这是否为所在操作系统的标准。

    这个例子将打印当前目录下带有扩展名 .txt 的所有文件名:

    1. import fnmatch
    2. import os
    3. for file in os.listdir('.'):
    4. if fnmatch.fnmatch(file, '*.txt'):
    5. print(file)

    fnmatch.fnmatchcase(filename, pattern)

    检测 filename 是否匹配 pattern,返回 TrueFalse;此比较是大小写敏感的,并且不会应用 os.path.normcase()

    fnmatch.filter(names, pattern)

    基于可迭代对象 names 中匹配 pattern 的元素构造一个列表。 它等价于 [n for n in names if fnmatch(n, pattern)],但实现得更有效率。

    fnmatch.translate(pattern)

    返回 shell 风格 pattern 转换成的正则表达式以便用于 re.match()

    示例:

    1. >>> import fnmatch, re
    2. >>>
    3. >>> regex = fnmatch.translate('*.txt')
    4. >>> regex
    5. '(?s:.*\\.txt)\\Z'
    6. >>> reobj = re.compile(regex)
    7. >>> reobj.match('foobar.txt')
    8. <re.Match object; span=(0, 10), match='foobar.txt'>

    参见

    模块 glob

    Unix shell 风格路径扩展。