17db96d56Sopenharmony_ci:mod:`fnmatch` --- Unix filename pattern matching
27db96d56Sopenharmony_ci=================================================
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ci.. module:: fnmatch
57db96d56Sopenharmony_ci   :synopsis: Unix shell style filename pattern matching.
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ci**Source code:** :source:`Lib/fnmatch.py`
87db96d56Sopenharmony_ci
97db96d56Sopenharmony_ci.. index:: single: filenames; wildcard expansion
107db96d56Sopenharmony_ci
117db96d56Sopenharmony_ci.. index:: pair: module; re
127db96d56Sopenharmony_ci
137db96d56Sopenharmony_ci--------------
147db96d56Sopenharmony_ci
157db96d56Sopenharmony_ciThis module provides support for Unix shell-style wildcards, which are *not* the
167db96d56Sopenharmony_cisame as regular expressions (which are documented in the :mod:`re` module).  The
177db96d56Sopenharmony_cispecial characters used in shell-style wildcards are:
187db96d56Sopenharmony_ci
197db96d56Sopenharmony_ci.. index::
207db96d56Sopenharmony_ci   single: * (asterisk); in glob-style wildcards
217db96d56Sopenharmony_ci   single: ? (question mark); in glob-style wildcards
227db96d56Sopenharmony_ci   single: [] (square brackets); in glob-style wildcards
237db96d56Sopenharmony_ci   single: ! (exclamation); in glob-style wildcards
247db96d56Sopenharmony_ci   single: - (minus); in glob-style wildcards
257db96d56Sopenharmony_ci
267db96d56Sopenharmony_ci+------------+------------------------------------+
277db96d56Sopenharmony_ci| Pattern    | Meaning                            |
287db96d56Sopenharmony_ci+============+====================================+
297db96d56Sopenharmony_ci| ``*``      | matches everything                 |
307db96d56Sopenharmony_ci+------------+------------------------------------+
317db96d56Sopenharmony_ci| ``?``      | matches any single character       |
327db96d56Sopenharmony_ci+------------+------------------------------------+
337db96d56Sopenharmony_ci| ``[seq]``  | matches any character in *seq*     |
347db96d56Sopenharmony_ci+------------+------------------------------------+
357db96d56Sopenharmony_ci| ``[!seq]`` | matches any character not in *seq* |
367db96d56Sopenharmony_ci+------------+------------------------------------+
377db96d56Sopenharmony_ci
387db96d56Sopenharmony_ciFor a literal match, wrap the meta-characters in brackets.
397db96d56Sopenharmony_ciFor example, ``'[?]'`` matches the character ``'?'``.
407db96d56Sopenharmony_ci
417db96d56Sopenharmony_ci.. index:: pair: module; glob
427db96d56Sopenharmony_ci
437db96d56Sopenharmony_ciNote that the filename separator (``'/'`` on Unix) is *not* special to this
447db96d56Sopenharmony_cimodule.  See module :mod:`glob` for pathname expansion (:mod:`glob` uses
457db96d56Sopenharmony_ci:func:`.filter` to match pathname segments).  Similarly, filenames starting with
467db96d56Sopenharmony_cia period are not special for this module, and are matched by the ``*`` and ``?``
477db96d56Sopenharmony_cipatterns.
487db96d56Sopenharmony_ci
497db96d56Sopenharmony_ciAlso note that :func:`functools.lru_cache` with the *maxsize* of 32768 is used to
507db96d56Sopenharmony_cicache the compiled regex patterns in the following functions: :func:`fnmatch`,
517db96d56Sopenharmony_ci:func:`fnmatchcase`, :func:`.filter`.
527db96d56Sopenharmony_ci
537db96d56Sopenharmony_ci.. function:: fnmatch(filename, pattern)
547db96d56Sopenharmony_ci
557db96d56Sopenharmony_ci   Test whether the *filename* string matches the *pattern* string, returning
567db96d56Sopenharmony_ci   :const:`True` or :const:`False`.  Both parameters are case-normalized
577db96d56Sopenharmony_ci   using :func:`os.path.normcase`. :func:`fnmatchcase` can be used to perform a
587db96d56Sopenharmony_ci   case-sensitive comparison, regardless of whether that's standard for the
597db96d56Sopenharmony_ci   operating system.
607db96d56Sopenharmony_ci
617db96d56Sopenharmony_ci   This example will print all file names in the current directory with the
627db96d56Sopenharmony_ci   extension ``.txt``::
637db96d56Sopenharmony_ci
647db96d56Sopenharmony_ci      import fnmatch
657db96d56Sopenharmony_ci      import os
667db96d56Sopenharmony_ci
677db96d56Sopenharmony_ci      for file in os.listdir('.'):
687db96d56Sopenharmony_ci          if fnmatch.fnmatch(file, '*.txt'):
697db96d56Sopenharmony_ci              print(file)
707db96d56Sopenharmony_ci
717db96d56Sopenharmony_ci
727db96d56Sopenharmony_ci.. function:: fnmatchcase(filename, pattern)
737db96d56Sopenharmony_ci
747db96d56Sopenharmony_ci   Test whether *filename* matches *pattern*, returning :const:`True` or
757db96d56Sopenharmony_ci   :const:`False`; the comparison is case-sensitive and does not apply
767db96d56Sopenharmony_ci   :func:`os.path.normcase`.
777db96d56Sopenharmony_ci
787db96d56Sopenharmony_ci
797db96d56Sopenharmony_ci.. function:: filter(names, pattern)
807db96d56Sopenharmony_ci
817db96d56Sopenharmony_ci   Construct a list from those elements of the iterable *names* that match *pattern*. It is the same as
827db96d56Sopenharmony_ci   ``[n for n in names if fnmatch(n, pattern)]``, but implemented more efficiently.
837db96d56Sopenharmony_ci
847db96d56Sopenharmony_ci
857db96d56Sopenharmony_ci.. function:: translate(pattern)
867db96d56Sopenharmony_ci
877db96d56Sopenharmony_ci   Return the shell-style *pattern* converted to a regular expression for
887db96d56Sopenharmony_ci   using with :func:`re.match`.
897db96d56Sopenharmony_ci
907db96d56Sopenharmony_ci   Example:
917db96d56Sopenharmony_ci
927db96d56Sopenharmony_ci      >>> import fnmatch, re
937db96d56Sopenharmony_ci      >>>
947db96d56Sopenharmony_ci      >>> regex = fnmatch.translate('*.txt')
957db96d56Sopenharmony_ci      >>> regex
967db96d56Sopenharmony_ci      '(?s:.*\\.txt)\\Z'
977db96d56Sopenharmony_ci      >>> reobj = re.compile(regex)
987db96d56Sopenharmony_ci      >>> reobj.match('foobar.txt')
997db96d56Sopenharmony_ci      <re.Match object; span=(0, 10), match='foobar.txt'>
1007db96d56Sopenharmony_ci
1017db96d56Sopenharmony_ci
1027db96d56Sopenharmony_ci.. seealso::
1037db96d56Sopenharmony_ci
1047db96d56Sopenharmony_ci   Module :mod:`glob`
1057db96d56Sopenharmony_ci      Unix shell-style path expansion.
106