glob — Unix 风格的路径名模式扩展 — Python 文档

来自菜鸟教程
Python/docs/3.9/library/glob
跳转至:导航、​搜索

glob — Unix 风格的路径名模式扩展

源代码: :source:`Lib/glob.py`



glob 模块根据 Unix shell 使用的规则查找与指定模式匹配的所有路径名,尽管结果以任意顺序返回。 不进行波浪号扩展,但 *? 和用 [] 表示的字符范围将正确匹配。 这是通过同时使用 os.scandir()fnmatch.fnmatch() 函数来完成的,而不是通过实际调用子 shell 来完成的。 请注意,与 fnmatch.fnmatch() 不同,glob 将以点开头的文件名 (.) 视为特殊情况。 (对于波浪号和 shell 变量扩展,使用 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.sepos.altsep,则文件将不匹配。

笔记

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

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.gif2.txtcard.gif 和仅包含文件 3.txt 的子目录 sub ]。 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 样式的文件名(不是路径)扩展