glob —- Unix style pathname pattern expansion
Source code:Lib/glob.py
The glob
module finds all the pathnames matching a specified patternaccording to the rules used by the Unix shell, although results are returned inarbitrary order. No tilde expansion is done, but *
, ?
, and characterranges expressed with []
will be correctly matched. This is done by usingthe os.scandir()
and fnmatch.fnmatch()
functions in concert, andnot 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()
andos.path.expandvars()
.)
For a literal match, wrap the meta-characters in brackets.For example, '[?]'
matches the character '?'
.
参见
pathlib
模块提供高级路径对象。
glob.
glob
(pathname, *, recursive=False)- Return a possibly-empty list of path names that match pathname, which must bea 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. Brokensymlinks are included in the results (as in the shell). Whether or not theresults are sorted depends on the file system.
If recursive is true, the pattern "**
" will match any files and zero ormore directories, subdirectories and symbolic links to directories. If thepattern is followed by an os.sep
or os.altsep
then files will notmatch.
Raises an auditing event glob.glob
with arguments pathname
, recursive
.
注解
在一个较大的目录树中使用 "**
" 模式可能会消耗非常多的时间。
在 3.5 版更改: Support for recursive globs using "**
".
glob.
iglob
(pathname, *, recursive=False)- Return an iterator which yields the same values as
glob()
without actually storing them all simultaneously.
Raises an auditing event glob.glob
with arguments pathname
, recursive
.
glob.
escape
(pathname)- Escape all special characters (
'?'
,'*'
and'['
).This is useful if you want to match an arbitrary literal string that mayhave special characters in it. Special characters in drive/UNCsharepoints are not escaped, e.g. on Windowsescape('//?/c:/Quo vadis?.txt')
returns'//?/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 producethe following results. Notice how any leading components of the path arepreserved.
- >>> 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 bydefault. For example, consider a directory containing card.gif
and.card.gif
:
- >>> import glob
- >>> glob.glob('*.gif')
- ['card.gif']
- >>> glob.glob('.c*')
- ['.card.gif']
参见
- Module
fnmatch
- Shell-style filename (not path) expansion