xref: /third_party/python/Doc/library/glob.rst (revision 7db96d56)
17db96d56Sopenharmony_ci:mod:`glob` --- Unix style pathname pattern expansion
27db96d56Sopenharmony_ci=====================================================
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ci.. module:: glob
57db96d56Sopenharmony_ci   :synopsis: Unix shell style pathname pattern expansion.
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ci**Source code:** :source:`Lib/glob.py`
87db96d56Sopenharmony_ci
97db96d56Sopenharmony_ci.. index:: single: filenames; pathname expansion
107db96d56Sopenharmony_ci
117db96d56Sopenharmony_ci--------------
127db96d56Sopenharmony_ci
137db96d56Sopenharmony_ci.. index::
147db96d56Sopenharmony_ci   single: * (asterisk); in glob-style wildcards
157db96d56Sopenharmony_ci   single: ? (question mark); in glob-style wildcards
167db96d56Sopenharmony_ci   single: [] (square brackets); in glob-style wildcards
177db96d56Sopenharmony_ci   single: ! (exclamation); in glob-style wildcards
187db96d56Sopenharmony_ci   single: - (minus); in glob-style wildcards
197db96d56Sopenharmony_ci   single: . (dot); in glob-style wildcards
207db96d56Sopenharmony_ci
217db96d56Sopenharmony_ciThe :mod:`glob` module finds all the pathnames matching a specified pattern
227db96d56Sopenharmony_ciaccording to the rules used by the Unix shell, although results are returned in
237db96d56Sopenharmony_ciarbitrary order.  No tilde expansion is done, but ``*``, ``?``, and character
247db96d56Sopenharmony_ciranges expressed with ``[]`` will be correctly matched.  This is done by using
257db96d56Sopenharmony_cithe :func:`os.scandir` and :func:`fnmatch.fnmatch` functions in concert, and
267db96d56Sopenharmony_cinot by actually invoking a subshell.
277db96d56Sopenharmony_ci
287db96d56Sopenharmony_ciNote that files beginning with a dot (``.``) can only be matched by
297db96d56Sopenharmony_cipatterns that also start with a dot,
307db96d56Sopenharmony_ciunlike :func:`fnmatch.fnmatch` or :func:`pathlib.Path.glob`.
317db96d56Sopenharmony_ci(For tilde and shell variable expansion, use :func:`os.path.expanduser` and
327db96d56Sopenharmony_ci:func:`os.path.expandvars`.)
337db96d56Sopenharmony_ci
347db96d56Sopenharmony_ciFor a literal match, wrap the meta-characters in brackets.
357db96d56Sopenharmony_ciFor example, ``'[?]'`` matches the character ``'?'``.
367db96d56Sopenharmony_ci
377db96d56Sopenharmony_ci
387db96d56Sopenharmony_ci.. seealso::
397db96d56Sopenharmony_ci   The :mod:`pathlib` module offers high-level path objects.
407db96d56Sopenharmony_ci
417db96d56Sopenharmony_ci
427db96d56Sopenharmony_ci.. function:: glob(pathname, *, root_dir=None, dir_fd=None, recursive=False, \
437db96d56Sopenharmony_ci                   include_hidden=False)
447db96d56Sopenharmony_ci
457db96d56Sopenharmony_ci   Return a possibly empty list of path names that match *pathname*, which must be
467db96d56Sopenharmony_ci   a string containing a path specification. *pathname* can be either absolute
477db96d56Sopenharmony_ci   (like :file:`/usr/src/Python-1.5/Makefile`) or relative (like
487db96d56Sopenharmony_ci   :file:`../../Tools/\*/\*.gif`), and can contain shell-style wildcards. Broken
497db96d56Sopenharmony_ci   symlinks are included in the results (as in the shell). Whether or not the
507db96d56Sopenharmony_ci   results are sorted depends on the file system.  If a file that satisfies
517db96d56Sopenharmony_ci   conditions is removed or added during the call of this function, whether
527db96d56Sopenharmony_ci   a path name for that file be included is unspecified.
537db96d56Sopenharmony_ci
547db96d56Sopenharmony_ci   If *root_dir* is not ``None``, it should be a :term:`path-like object`
557db96d56Sopenharmony_ci   specifying the root directory for searching.  It has the same effect on
567db96d56Sopenharmony_ci   :func:`glob` as changing the current directory before calling it.  If
577db96d56Sopenharmony_ci   *pathname* is relative, the result will contain paths relative to
587db96d56Sopenharmony_ci   *root_dir*.
597db96d56Sopenharmony_ci
607db96d56Sopenharmony_ci   This function can support :ref:`paths relative to directory descriptors
617db96d56Sopenharmony_ci   <dir_fd>` with the *dir_fd* parameter.
627db96d56Sopenharmony_ci
637db96d56Sopenharmony_ci   .. index::
647db96d56Sopenharmony_ci      single: **; in glob-style wildcards
657db96d56Sopenharmony_ci
667db96d56Sopenharmony_ci   If *recursive* is true, the pattern "``**``" will match any files and zero or
677db96d56Sopenharmony_ci   more directories, subdirectories and symbolic links to directories. If the
687db96d56Sopenharmony_ci   pattern is followed by an :data:`os.sep` or :data:`os.altsep` then files will not
697db96d56Sopenharmony_ci   match.
707db96d56Sopenharmony_ci
717db96d56Sopenharmony_ci   If *include_hidden* is true, "``**``" pattern will match hidden directories.
727db96d56Sopenharmony_ci
737db96d56Sopenharmony_ci   .. audit-event:: glob.glob pathname,recursive glob.glob
747db96d56Sopenharmony_ci   .. audit-event:: glob.glob/2 pathname,recursive,root_dir,dir_fd glob.glob
757db96d56Sopenharmony_ci
767db96d56Sopenharmony_ci   .. note::
777db96d56Sopenharmony_ci      Using the "``**``" pattern in large directory trees may consume
787db96d56Sopenharmony_ci      an inordinate amount of time.
797db96d56Sopenharmony_ci
807db96d56Sopenharmony_ci   .. versionchanged:: 3.5
817db96d56Sopenharmony_ci      Support for recursive globs using "``**``".
827db96d56Sopenharmony_ci
837db96d56Sopenharmony_ci   .. versionchanged:: 3.10
847db96d56Sopenharmony_ci      Added the *root_dir* and *dir_fd* parameters.
857db96d56Sopenharmony_ci
867db96d56Sopenharmony_ci   .. versionchanged:: 3.11
877db96d56Sopenharmony_ci      Added the *include_hidden* parameter.
887db96d56Sopenharmony_ci
897db96d56Sopenharmony_ci
907db96d56Sopenharmony_ci.. function:: iglob(pathname, *, root_dir=None, dir_fd=None, recursive=False, \
917db96d56Sopenharmony_ci                    include_hidden=False)
927db96d56Sopenharmony_ci
937db96d56Sopenharmony_ci   Return an :term:`iterator` which yields the same values as :func:`glob`
947db96d56Sopenharmony_ci   without actually storing them all simultaneously.
957db96d56Sopenharmony_ci
967db96d56Sopenharmony_ci   .. audit-event:: glob.glob pathname,recursive glob.iglob
977db96d56Sopenharmony_ci   .. audit-event:: glob.glob/2 pathname,recursive,root_dir,dir_fd glob.iglob
987db96d56Sopenharmony_ci
997db96d56Sopenharmony_ci   .. versionchanged:: 3.5
1007db96d56Sopenharmony_ci      Support for recursive globs using "``**``".
1017db96d56Sopenharmony_ci
1027db96d56Sopenharmony_ci   .. versionchanged:: 3.10
1037db96d56Sopenharmony_ci      Added the *root_dir* and *dir_fd* parameters.
1047db96d56Sopenharmony_ci
1057db96d56Sopenharmony_ci   .. versionchanged:: 3.11
1067db96d56Sopenharmony_ci      Added the *include_hidden* parameter.
1077db96d56Sopenharmony_ci
1087db96d56Sopenharmony_ci
1097db96d56Sopenharmony_ci.. function:: escape(pathname)
1107db96d56Sopenharmony_ci
1117db96d56Sopenharmony_ci   Escape all special characters (``'?'``, ``'*'`` and ``'['``).
1127db96d56Sopenharmony_ci   This is useful if you want to match an arbitrary literal string that may
1137db96d56Sopenharmony_ci   have special characters in it.  Special characters in drive/UNC
1147db96d56Sopenharmony_ci   sharepoints are not escaped, e.g. on Windows
1157db96d56Sopenharmony_ci   ``escape('//?/c:/Quo vadis?.txt')`` returns ``'//?/c:/Quo vadis[?].txt'``.
1167db96d56Sopenharmony_ci
1177db96d56Sopenharmony_ci   .. versionadded:: 3.4
1187db96d56Sopenharmony_ci
1197db96d56Sopenharmony_ci
1207db96d56Sopenharmony_ciFor example, consider a directory containing the following files:
1217db96d56Sopenharmony_ci:file:`1.gif`, :file:`2.txt`, :file:`card.gif` and a subdirectory :file:`sub`
1227db96d56Sopenharmony_ciwhich contains only the file :file:`3.txt`.  :func:`glob` will produce
1237db96d56Sopenharmony_cithe following results.  Notice how any leading components of the path are
1247db96d56Sopenharmony_cipreserved. ::
1257db96d56Sopenharmony_ci
1267db96d56Sopenharmony_ci   >>> import glob
1277db96d56Sopenharmony_ci   >>> glob.glob('./[0-9].*')
1287db96d56Sopenharmony_ci   ['./1.gif', './2.txt']
1297db96d56Sopenharmony_ci   >>> glob.glob('*.gif')
1307db96d56Sopenharmony_ci   ['1.gif', 'card.gif']
1317db96d56Sopenharmony_ci   >>> glob.glob('?.gif')
1327db96d56Sopenharmony_ci   ['1.gif']
1337db96d56Sopenharmony_ci   >>> glob.glob('**/*.txt', recursive=True)
1347db96d56Sopenharmony_ci   ['2.txt', 'sub/3.txt']
1357db96d56Sopenharmony_ci   >>> glob.glob('./**/', recursive=True)
1367db96d56Sopenharmony_ci   ['./', './sub/']
1377db96d56Sopenharmony_ci
1387db96d56Sopenharmony_ciIf the directory contains files starting with ``.`` they won't be matched by
1397db96d56Sopenharmony_cidefault. For example, consider a directory containing :file:`card.gif` and
1407db96d56Sopenharmony_ci:file:`.card.gif`::
1417db96d56Sopenharmony_ci
1427db96d56Sopenharmony_ci   >>> import glob
1437db96d56Sopenharmony_ci   >>> glob.glob('*.gif')
1447db96d56Sopenharmony_ci   ['card.gif']
1457db96d56Sopenharmony_ci   >>> glob.glob('.c*')
1467db96d56Sopenharmony_ci   ['.card.gif']
1477db96d56Sopenharmony_ci
1487db96d56Sopenharmony_ci.. seealso::
1497db96d56Sopenharmony_ci
1507db96d56Sopenharmony_ci   Module :mod:`fnmatch`
1517db96d56Sopenharmony_ci      Shell-style filename (not path) expansion
152