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.sepos.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 风格文件名(而非路径)扩展