# 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.``fnmatchcase`(filename, pattern)

  测试filename是否匹配模式，返回`True`或`False`；比较是区分大小写的。

`fnmatch.``filter`(names, pattern)

  返回与模式匹配的名称列表的子集。它与名称中的`[n n` t6> if fnmatch（n， pattern）]，但实现更有效。

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