# 11.7. `glob` — Unix风格的路径名匹配

源代码： Lib/glob.py

`glob` 模块使用一个Unix shell规则的字符串查找与其匹配的所有路径, 但返回的结果是无序的。支持除波浪号~之外的其他符号，如`*`，`?`及用`[]`包裹的字符范围。此函数内部使用了`os.listdir()` 及`fnmatch.fnmatch()`实现，而没有真正调用一个shell。请注意，与`fnmatch.fnmatch()`不同的是，`glob`将文件路径以点(`.`)开头视为一个特殊情况。(对于波浪号扩展和shell变量扩展，使用 `os.path.expanduser()` 和 `os.path.expandvars()`。)

如果想匹配转义符本身，将转义符用方括号包裹。例如, `'[?]'`将匹配字符 `'?'`。

参见

`pathlib`模块提供高级的路径对象处理。

`glob.``glob`(pathname, *, recursive=False)

  返回一个与pathname匹配的路径组成的list，该list可能为空。 该参数必须为包含路径说明的字符串。pathname 可以为绝对路径 (like `/usr/src/Python-1.5/Makefile`) 或相对路径 (like `../../Tools/*/*.gif`), 并且可以包含shell风格的通配符。损坏的符号链接将被包含在结果中 (类似于shell中)。

  如果 recursive 设置为真，“`**`” 将匹配所有存在的目录和子目录和任何文件。如果匹配式以 `os.sep` 结尾, 只对目录和子目录进行匹配。

  注意

  在一个大型目录树中使用 “`**`” 可能会消耗过多的时间。

  版本3.5中修改:支持启用递归时使用 “`**`”。

`glob.``iglob`(pathname, recursive=False)

  返回一个 iterator 迭代器，它产生与 `glob()` 相同的结果，但同时不会存储它们。

`glob.``escape`(pathname)

  转义所有的特殊字符（`'？'`，`'*'`和`'['`]）。如果您想匹配任意可能包含特殊字符的字符串，这将非常有用。驱动器/ UNC共享点中的特殊字符不会转义，例如在Windows系统上 `escape('//?/c:/Quo vadis?.txt')` 将返回 `'//?/c:/Quo vadis[?].txt'`。

  版本3.4中新增。

例如，一个包含以下文件的目录：`1.gif`，`2.txt`，`card.gif`，目录中还有一子目录`sub`其中只包含文件`3.txt`。`glob()`将产生以下结果。注意如何保留路径的任何前导组件。

    >>> import glob
    >>> glob.glob('./[0-9].*')
    ['./1.gif', './2.txt']
    >>> glob.glob('*.gif')
    ['1.gif', 'card.gif']
    >>> glob.glob('?.gif')
    ['1.gif']
    >>> glob.glob('**/*.txt', recursive=True)
    ['2.txt', 'sub/3.txt']
    >>> glob.glob('./**/', recursive=True)
    ['./', './sub/']

如果目录包含以`.`开头的文件。默认将不会匹配到它们。例如，一个包含`card.gif`和`.card.gif`的目录：

    >>> import glob
    >>> glob.glob('*.gif')
    ['card.gif']
    >>> glob.glob('.c*')
    ['.card.gif']

参见

模块 `fnmatch`
  Shell风格的文件名（而不是路径）扩展