Skip to main content

11.7. glob — Unix样式路径名模式扩展

源代码: Lib/glob.py


glob 模块根据Unix shell使用的规则查找与指定模式匹配的所有路径名,但会以任意顺序返回结果。不进行波纹扩展,但 *? 和用 [] 表示的字符范围将正确匹配。这是通过使用 os.scandir()fnmatch.fnmatch() 功能协同完成的,而不是通过实际调用subshell。注意,与 fnmatch.fnmatch() 不同,glob 将以点(.)开头的文件名视为特殊情况。 (对于波形和壳变量扩展,使用 os.path.expanduser()os.path.expandvars()。)

对于文字匹配,将元字符括在括号中。例如,'[?]' 匹配字符 '?'

参见

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

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

返回与 pathname 匹配的可能为空的路径名列表,它必须是包含路径规范的字符串。 pathname 可以是绝对的(如 /usr/src/Python-1.5/Makefile)或相对的(如 ../../Tools/*/*.gif),并且可以包含shell样式的通配符。破坏的符号链接包含在结果中(如在shell中)。

如果 recursive 为真,模式“ ** ”将匹配任何文件和零个或多个目录和子目录。如果模式后面是 os.sep,只有目录和子目录匹配。

注解

在大目录树中使用“ ** ”模式可能消耗过多的时间。

在 3.5 版更改: 支持使用“ ** ”的递归globs。

glob.iglob(pathname, recursive=False)

返回一个 iterator,它产生与 glob() 相同的值,但实际上不会同时存储它们。

glob.escape(pathname)

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

3.4 新版功能.

例如,考虑一个包含以下文件的目录:1.gif2.txtcard.gif 和只包含文件 3.txt 的子目录 subglob() 将产生以下结果。注意如何保留路径的任何前导组件。

>>> 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样式文件名(而不是路径)扩展