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