11.7. 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.listdir()
and fnmatch.fnmatch()
functions in concert, and
not by actually invoking a subshell. Note that unlike fnmatch.fnmatch()
,
glob
treats filenames beginning with a dot (.
) as special cases.
(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 中一样)。If recursive is true, the pattern 「
**
」 will match any files and zero or more directories and subdirectories. If the pattern is followed by anos.sep
, only directories and subdirectories match.備註
在一个较大的目录树中使用 「
**
」 模式可能会消耗非常多的时间。3.5 版更變: 支持使用 「
**
」 的递归 glob.
-
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 风格文件名(而非路径)扩展