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

源代码: Lib/glob.py


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.scandir() 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() .)

For a literal match, wrap the meta-characters in brackets. For example, '[?]' 匹配字符 '?' .

另请参阅

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

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

Return a possibly-empty list of path names that match pathname , which must be a string containing a path specification. pathname can be either absolute (like /usr/src/Python-1.5/Makefile ) or relative (like ../../Tools/*/*.gif ), and can contain shell-style wildcards. Broken symlinks are included in the results (as in the shell).

recursive 为 True,模式 “ ** ” will match any files and zero or more directories and subdirectories. If the pattern is followed by an os.sep , only directories and subdirectories match.

注意

使用 “ ** ” pattern in large directory trees may consume an inordinate amount of time.

3.5 版改变: Support for recursive globs using “ ** ”.

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

返回 iterator which yields the same values as glob() without actually storing them all simultaneously.

glob. escape ( pathname )

转义所有特殊字符 ( '?' , '*' and '[' ). This is useful if you want to match an arbitrary literal string that may have special characters in it. Special characters in drive/UNC sharepoints are not escaped, e.g. on Windows escape('//?/c:/Quo vadis?.txt') 返回 '//?/c:/Quo vadis[?].txt' .

3.4 版新增。

For example, consider a directory containing the following files: 1.gif , 2.txt , card.gif and a subdirectory sub which contains only the file 3.txt . glob() will produce the following results. Notice how any leading components of the path are preserved.

>>> 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/']
							

If the directory contains files starting with . they won’t be matched by default. For example, consider a directory containing card.gif and .card.gif :

>>> import glob
>>> glob.glob('*.gif')
['card.gif']
>>> glob.glob('.c*')
['.card.gif']
							

另请参阅

模块 fnmatch
Shell 样式文件名 (非路径) 扩展

上一话题

11.6. tempfile — 生成临时文件和目录

下一话题

11.8. fnmatch — Unix 文件名模式匹配

本页