\section{\module{fnmatch} --- \UNIX{} filename pattern matching}\declaremodule{standard}{fnmatch}\modulesynopsis{\UNIX\ shell style filename pattern matching.}\index{filenames!wildcard expansion}This module provides support for \UNIX{} shell-style wildcards, whichare \emph{not} the same as regular expressions (which are documentedin the \refmodule{re}\refstmodindex{re} module). The specialcharacters used in shell-style wildcards are:\begin{tableii}{c|l}{code}{Pattern}{Meaning} \lineii{*}{matches everything} \lineii{?}{matches any single character} \lineii{[\var{seq}]}{matches any character in \var{seq}} \lineii{[!\var{seq}]}{matches any character not in \var{seq}}\end{tableii}Note that the filename separator (\code{'/'} on \UNIX) is \emph{not}special to this module. See module\refmodule{glob}\refstmodindex{glob} for pathname expansion(\refmodule{glob} uses \function{fnmatch()} to match pathnamesegments). Similarly, filenames starting with a period arenot special for this module, and are matched by the \code{*} and\code{?} patterns.\begin{funcdesc}{fnmatch}{filename, pattern}Test whether the \var{filename} string matches the \var{pattern}string, returning true or false. If the operating system iscase-insensitive, then both parameters will be normalized to alllower- or upper-case before the comparison is performed. If yourequire a case-sensitive comparison regardless of whether that'sstandard for your operating system, use \function{fnmatchcase()}instead.This example will print all file names in the current directory with theextension \code{.txt}:\begin{verbatim}import fnmatchimport osfor file in os.listdir('.'): if fnmatch.fnmatch(file, '*.txt'): print file\end{verbatim}\end{funcdesc}\begin{funcdesc}{fnmatchcase}{filename, pattern}Test whether \var{filename} matches \var{pattern}, returning true orfalse; the comparison is case-sensitive.\end{funcdesc}\begin{funcdesc}{filter}{names, pattern}Return the subset of the list of \var{names} that match \var{pattern}.It is the same as \code{[n for n in names if fnmatch(n, pattern)]}, butimplemented more efficiently.\versionadded{2.2}\end{funcdesc}\begin{funcdesc}{translate}{pattern}Return the shell-style \var{pattern} converted to a regularexpression.Example:\begin{verbatim}>>> import fnmatch, re>>>>>> regex = fnmatch.translate('*.txt')>>> regex'.*\\.txt$'>>> reobj = re.compile(regex)>>> print reobj.match('foobar.txt')<_sre.SRE_Match object at 0x...>\end{verbatim}\end{funcdesc}\begin{seealso} \seemodule{glob}{\UNIX{} shell-style path expansion.}\end{seealso}
\section{\module{fnmatch} ---
\UNIX{} filename pattern matching}
\declaremodule{standard}{fnmatch}
\modulesynopsis{\UNIX\ shell style filename pattern matching.}
\index{filenames!wildcard expansion}
This module provides support for \UNIX{} shell-style wildcards, which
are \emph{not} the same as regular expressions (which are documented
in the \refmodule{re}\refstmodindex{re} module). The special
characters used in shell-style wildcards are:
\begin{tableii}{c|l}{code}{Pattern}{Meaning}
\lineii{*}{matches everything}
\lineii{?}{matches any single character}
\lineii{[\var{seq}]}{matches any character in \var{seq}}
\lineii{[!\var{seq}]}{matches any character not in \var{seq}}
\end{tableii}
Note that the filename separator (\code{'/'} on \UNIX) is \emph{not}
special to this module. See module
\refmodule{glob}\refstmodindex{glob} for pathname expansion
(\refmodule{glob} uses \function{fnmatch()} to match pathname
segments). Similarly, filenames starting with a period are
not special for this module, and are matched by the \code{*} and
\code{?} patterns.
\begin{funcdesc}{fnmatch}{filename, pattern}
Test whether the \var{filename} string matches the \var{pattern}
string, returning true or false. If the operating system is
case-insensitive, then both parameters will be normalized to all
lower- or upper-case before the comparison is performed. If you
require a case-sensitive comparison regardless of whether that's
standard for your operating system, use \function{fnmatchcase()}
instead.
This example will print all file names in the current directory with the
extension \code{.txt}:
\begin{verbatim}
import fnmatch
import os
for file in os.listdir('.'):
if fnmatch.fnmatch(file, '*.txt'):
print file
\end{verbatim}
\end{funcdesc}
\begin{funcdesc}{fnmatchcase}{filename, pattern}
Test whether \var{filename} matches \var{pattern}, returning true or
false; the comparison is case-sensitive.
\end{funcdesc}
\begin{funcdesc}{filter}{names, pattern}
Return the subset of the list of \var{names} that match \var{pattern}.
It is the same as \code{[n for n in names if fnmatch(n, pattern)]}, but
implemented more efficiently.
\versionadded{2.2}
\end{funcdesc}
\begin{funcdesc}{translate}{pattern}
Return the shell-style \var{pattern} converted to a regular
expression.
Example:
\begin{verbatim}
>>> import fnmatch, re
>>>
>>> regex = fnmatch.translate('*.txt')
>>> regex
'.*\\.txt$'
>>> reobj = re.compile(regex)
>>> print reobj.match('foobar.txt')
<_sre.SRE_Match object at 0x...>
\end{verbatim}
\end{funcdesc}
\begin{seealso}
\seemodule{glob}{\UNIX{} shell-style path expansion.}
\end{seealso}