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 subwhich contains only the file 3.txt. glob() will producethe following results. Notice how any leading components of the path arepreserved.

  1. >>> import glob
  2. >>> glob.glob('./[0-9].*')
  3. ['./1.gif', './2.txt']
  4. >>> glob.glob('*.gif')
  5. ['1.gif', 'card.gif']
  6. >>> glob.glob('?.gif')
  7. ['1.gif']
  8. >>> glob.glob('**/*.txt', recursive=True)
  9. ['2.txt', 'sub/3.txt']
  10. >>> glob.glob('./**/', recursive=True)
  11. ['./', './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:

  1. >>> import glob
  2. >>> glob.glob('*.gif')
  3. ['card.gif']
  4. >>> glob.glob('.c*')
  5. ['.card.gif']

参见

  • Module fnmatch
  • Shell-style filename (not path) expansion