Python 3.6.5 Documentation >  "fnmatch" — Unix filename pattern matching

"fnmatch" — Unix filename pattern matching
******************************************

**Source code:** Lib/fnmatch.py

======================================================================

This module provides support for Unix shell-style wildcards, which are
*not* the same as regular expressions (which are documented in the
"re" module). The special characters used in shell-style wildcards
are:

+--------------+--------------------------------------+
| Pattern | Meaning |
+==============+======================================+
| "*" | matches everything |
+--------------+--------------------------------------+
| "?" | matches any single character |
+--------------+--------------------------------------+
| "[seq]" | matches any character in *seq* |
+--------------+--------------------------------------+
| "[!seq]" | matches any character not in *seq* |
+--------------+--------------------------------------+

For a literal match, wrap the meta-characters in brackets. For
example, "'[?]'" matches the character "'?'".

Note that the filename separator ("'/'" on Unix) is *not* special to
this module. See module "glob" for pathname expansion ("glob" uses
"fnmatch()" to match pathname segments). Similarly, filenames
starting with a period are not special for this module, and are
matched by the "*" and "?" patterns.

fnmatch.fnmatch(filename, pattern)

Test whether the *filename* string matches the *pattern* string,
returning "True" or "False". Both parameters are case-normalized
using "os.path.normcase()". "fnmatchcase()" can be used to perform
a case-sensitive comparison, regardless of whether that’s standard
for the operating system.

This example will print all file names in the current directory
with the extension ".txt":

import fnmatch
import os

for file in os.listdir('.'):
if fnmatch.fnmatch(file, '*.txt'):
print(file)

fnmatch.fnmatchcase(filename, pattern)

Test whether *filename* matches *pattern*, returning "True" or
"False"; the comparison is case-sensitive and does not apply
"os.path.normcase()".

fnmatch.filter(names, pattern)

Return the subset of the list of *names* that match *pattern*. It
is the same as "[n for n in names if fnmatch(n, pattern)]", but
implemented more efficiently.

fnmatch.translate(pattern)

Return the shell-style *pattern* converted to a regular expression
for using with "re.match()".

Example:

>>> import fnmatch, re
>>>
>>> regex = fnmatch.translate('*.txt')
>>> regex
'(?s:.*\\.txt)\\Z'
>>> reobj = re.compile(regex)
>>> reobj.match('foobar.txt')
<_sre.SRE_Match object; span=(0, 10), match='foobar.txt'>

See also:

Module "glob"
Unix shell-style path expansion.