glob — Unix style pathname pattern expansion

Source code:Lib/glob.py


Theglob 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 usingtheos.scandir() andfnmatch.fnmatch() functions in concert, andnot by actually invoking a subshell. Note that unlikefnmatch.fnmatch(),glob treats filenames beginning with a dot (.) as special cases.(For tilde and shell variable expansion, useos.path.expanduser() andos.path.expandvars().)

For a literal match, wrap the meta-characters in brackets.For example,'[?]' matches the character'?'.

See also

Thepathlib module offers high-level path objects.

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

Return a possibly-empty list of path names that matchpathname, 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 a file that satisfiesconditions is removed or added during the call of this function, whethera path name for that file be included is unspecified.

Ifrecursive is true, the pattern “**” will match any files and zero ormore directories, subdirectories and symbolic links to directories. If thepattern is followed by anos.sep oros.altsep then files will notmatch.

Raises anauditing eventglob.glob with argumentspathname,recursive.

Note

Using the “**” pattern in large directory trees may consumean inordinate amount of time.

Changed in version 3.5:Support for recursive globs using “**”.

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

Return aniterator which yields the same values asglob()without actually storing them all simultaneously.

Raises anauditing eventglob.glob with argumentspathname,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:/Quovadis?.txt') returns'//?/c:/Quovadis[?].txt'.

New in version 3.4.

For example, consider a directory containing the following files:1.gif,2.txt,card.gif and a subdirectorysubwhich contains only the file3.txt.glob() will producethe following results. Notice how any leading components of the path arepreserved.

>>>importglob>>>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 containingcard.gif and.card.gif:

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

See also

Modulefnmatch

Shell-style filename (not path) expansion