Source code:
———
The glob module finds pathnames using pattern matching rules similar to the Unix shell. No tilde expansion is done, but *, ?, and character ranges expressed with [] will be correctly matched. This is done by using the
and
functions in concert, and not by actually invoking a subshell.
Note
The pathnames are returned in no particular order. If you need a specific order, sort the results.
By default, files beginning with a dot (.) can only be matched by patterns that also start with a dot, unlike
or
. For tilde and shell variable expansion, use
and
.
For a literal match, wrap the meta-characters in brackets. For example, '[?]' matches the character '?'.
The glob module defines the following functions:
glob.glob(pathname, *, root_dir=None, dir_fd=None, recursive=False, include_hidden=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). Whether or not the results are sorted depends on the file system. If a file that satisfies conditions is removed or added during the call of this function, whether a path name for that file will be included is unspecified.
If root_dir is not None, it should be a
specifying the root directory for searching. It has the same effect on glob() as changing the current directory before calling it. If pathname is relative, the result will contain paths relative to root_dir.
This function can support
paths relative to directory descriptors
with the dir_fd parameter.
If recursive is true, the pattern “**” will match any files and zero or more directories, subdirectories and symbolic links to directories. If the pattern is followed by an
or
then files will not match.
If include_hidden is true, wildcards can match path segments that begin with a dot (.).
Raises an
glob.glob with arguments pathname, recursive.
Raises an
glob.glob/2 with arguments pathname, recursive, root_dir, dir_fd.
Note
Using the “**” pattern in large directory trees may consume an inordinate amount of time.
Note
This function may return duplicate path names if pathname contains multiple “**” patterns and recursive is true.
Note
Any
exceptions raised from scanning the filesystem are suppressed. This includes
when accessing directories without read permission.
Changed in version 3.5: Support for recursive globs using “**”.
Changed in version 3.10: Added the root_dir and dir_fd parameters.
Changed in version 3.11: Added the include_hidden parameter.
glob.iglob(pathname, *, root_dir=None, dir_fd=None, recursive=False, include_hidden=False)
Return an
which yields the same values as
without actually storing them all simultaneously.
Raises an
glob.glob with arguments pathname, recursive.
Raises an
glob.glob/2 with arguments pathname, recursive, root_dir, dir_fd.
Note
This function may return duplicate path names if pathname contains multiple “**” patterns and recursive is true.
Note
Any
exceptions raised from scanning the filesystem are suppressed. This includes
when accessing directories without read permission.
Changed in version 3.5: Support for recursive globs using “**”.
Changed in version 3.10: Added the root_dir and dir_fd parameters.
Changed in version 3.11: Added the include_hidden parameter.
glob.escape(pathname)
Escape all special characters ('?', '*' 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, for example on Windows escape('//?/c:/Quovadis?.txt') returns '//?/c:/Quovadis[?].txt'.
Added in version 3.4.
glob.translate(pathname, *, recursive=False, include_hidden=False, seps=None)
Convert the given path specification to a regular expression for use with
. The path specification can contain shell-style wildcards.
For example:
>>> importglob,re>>>>>> regex=glob.translate('**/*.txt',recursive=True,include_hidden=True)>>> regex'(?s:(?:.+/)?[^/]*\\.txt)\\z'>>> reobj=re.compile(regex)>>> reobj.prefixmatch('foo/bar/baz.txt')<re.Match object; span=(0, 15), match='foo/bar/baz.txt'>Path separators and segments are meaningful to this function, unlike
. By default wildcards do not match path separators, and * pattern segments match precisely one path segment.
If recursive is true, the pattern segment “**” will match any number of path segments.
If include_hidden is true, wildcards can match path segments that start with a dot (.).
A sequence of path separators may be supplied to the seps argument. If not given,
and
(if available) are used.
Added in version 3.13.
Examples
Consider a directory containing the following files: 1.gif, 2.txt, card.gif and a subdirectory sub which contains only the file 3.txt.
will produce the following results. Notice how any leading components of the path are preserved.
>>> 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 by default. For example, consider a directory containing card.gif and .card.gif:
>>> importglob>>> glob.glob('*.gif')['card.gif']>>> glob.glob('.c*')['.card.gif']See also
The
module offers shell-style filename (not path) expansion.
See also
The
module offers high-level path objects.