86 lines · 2.6 KB · TeX
RawDownload
\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 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 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}