glob-Unix风格的路径名模式扩展(7)Python文件和目录访问模块(必读进阶Python教程)(参考资料)
该glob
模块发现所有匹配的根据由Unix外壳使用的规则指定模式的路径名,尽管结果在任意的顺序返回。没有进行波浪线扩展,但是*
,?
和表示的字符范围[]
将正确匹配。这是通过使用os.scandir()
和fnmatch.fnmatch()
声音中的和函数来完成的,而不是通过实际调用子shell来完成的。需要注意的是不像fnmatch.fnmatch()
, glob
把以点(开始的文件名.
)作为特殊情况。(对于波形符和贝壳变量扩展,请使用os.path.expanduser()
和os.path.expandvars()
。)
对于文字匹配,将元字符包装在括号中。例如,'[?]'
匹配角色'?'
。
也可以看看
该pathlib
模块提供高级路径对象。
glob.
glob
(pathname,*,recursive = False )- 返回匹配的路径名可能空单路径,它必须包含路径规范的字符串。pathname可以是绝对(like
/usr/src/Python-1.5/Makefile
)或相对(like../../Tools/*/*.gif
),也可以包含shell样式的通配符。结果中包含损坏的符号链接(如在shell中)。如果recursive为true,则模式“
**
”将匹配任何文件以及零个或多个目录和子目录。如果模式后跟aos.sep
,则只有目录和子目录匹配。注意
**
在大型目录树中使用“ ”模式可能会消耗过多的时间。在版本3.5中更改:使用“
**
” 支持递归globs 。
glob.
iglob
(pathname,*,recursive = False )- 返回一个迭代器,它产生相同的值,
glob()
而不是实际同时存储它们。
glob.
escape
(路径名)- 转义所有特殊字符(
'?'
,'*'
和'['
)。如果要匹配可能包含特殊字符的任意文字字符串,这将非常有用。驱动器/ UNC共享点中的特殊字符不会被转义,例如在Windows 返回时。escape('//?/c:/Quovadis?.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样式的文件名(不是路径)扩展