# `glob` --- Unix 风格路径名模式扩展

源代码: Lib/glob.py

The `glob` module finds all the pathnames matching a specified pattern according to the rules used by the Unix shell, although results are returned in arbitrary order. No tilde expansion is done, but `*`, `?`, and character ranges expressed with `[]` will be correctly matched. This is done by using the `os.scandir()` and `fnmatch.fnmatch()` functions in concert, and not by actually invoking a subshell.

Note that files beginning with a dot (`.`) can only be matched by patterns that also start with a dot, unlike `fnmatch.fnmatch()` or `pathlib.Path.glob()`. (For tilde and shell variable expansion, use `os.path.expanduser()` and `os.path.expandvars()`.)

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

也參考

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

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

  返回匹配 pathname 的可能为空的路径名列表，其中的元素必须为包含路径信息的字符串。 pathname 可以是绝对路径 (如 `/usr/src/Python-1.5/Makefile`) 或相对路径 (如 `../../Tools/*/*.gif`)，并且可包含 shell 风格的通配符。 结果也将包含无效的符号链接（与在 shell 中一样）。 结果是否排序取决于具体文件系统。 如果某个符合条件的文件在调用此函数期间被移除或添加，是否包括该文件的路径是没有规定的。

  如果 recursive 为真值，则模式 "`**`" 将匹配目录中的任何文件以及零个或多个目录、子目录和符号链接。 如果模式加了一个 `os.sep` 或 `os.altsep` 则将不匹配文件。

  引发一个 审计事件 `glob.glob` 附带参数 `pathname`, `recursive`。

  備註

  在一个较大的目录树中使用 "`**`" 模式可能会消耗非常多的时间。

  3.5 版更變: 支持使用 "`**`" 的递归 glob。

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

  返回一个 iterator，它会产生与 `glob()` 相同的结果，但不会实际地同时保存它们。

  引发一个 审计事件 `glob.glob` 附带参数 `pathname`, `recursive`。

`glob.``escape`(pathname)

  转义所有特殊字符 (`'?'`, `'*'` 和 `'['`)。 这适用于当你想要匹配可能带有特殊字符的任意字符串字面值的情况。 在 drive/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 风格文件名（而非路径）扩展