fnmatch - Unix filename pattern matching in Python - GeeksforGeeks

22 Nov, 2020
This module is used for matching Unix shell-style wildcards. fnmatch() compares a single file name against a pattern and returns TRUE if they match else returns FALSE.The comparison is case-sensitive when the operating system uses a case-sensitive file system.The special characters and their functions used in shell-style wildcards are :
‘*’ – matches everything
‘?’ – matches any single character
‘[seq]’ – matches any character in seq
‘[!seq]’ – matches any character not in seq
The meta-characters should be wrapped in brackets for a literal match. For example, ‘[?]’ matches the character ‘?’.
Functions provided by the fnmatch module
fnmatch.fnmatch(filename, pattern): This function tests whether the given filename string matches the pattern string and returns a boolean value. If the operating system is case-insensitive, then both parameters will be normalized to all lower-case or upper-case before the comparison is performed.Example: Script to search all files starting with ‘fnmatch’ and ending in ‘.py’# Python program to illustrate # fnmatch.fnmatch(filename, pattern) import fnmatch import os   pattern = 'fnmatch_*.py'print ('Pattern :', pattern )print()  files = os.listdir('.') for name in files:     print ('Filename: %-25s %s' % (name, fnmatch.fnmatch(name, pattern))Output :$ python fnmatch_fnmatch.py

Pattern : fnmatch_*.py

Filename: __init__.py               False
Filename: fnmatch_filter.py         True
Filename: fnmatch_fnmatch.py        True
Filename: fnmatch_fnmatchcase.py    True
Filename: fnmatch_translate.py      True
Filename: index.rst                 False
fnmatch.fnmatchcase(filename, pattern): This function performs the case sensitive comparison and tests whether the given filename string matches the pattern string and returns a boolean value.Example: Script for a case-sensitive comparison, regardless of the filesystem and operating system settings.# Python program to illustrate # fnmatch.fnmatchcase(filename, pattern) import fnmatch import os   pattern = 'FNMATCH_*.PY'print ('Pattern :', pattern) print()  files = os.listdir('.')   for name in files:     (print 'Filename: %-25s %s' % (name, fnmatch.fnmatchcase(name, pattern)))Output :$ python fnmatch_fnmatchcase.py

Pattern : FNMATCH_*.PY

Filename: __init__.py               False
Filename: fnmatch_filter.py         False
Filename: FNMATCH_FNMATCH.PY        True
Filename: fnmatch_fnmatchcase.py    False
Filename: fnmatch_translate.py      False
Filename: index.rst                 False
fnmatch.filter(names, pattern): This function returns the subset of the list of names passed in the function that match the given pattern.Example: Filter files by more than one file extension.# Python program to illustrate # fnmatch.filter(names, pattern) import fnmatch import os    pattern = 'fnmatch_*.py'print ('Pattern :', pattern )   files = os.listdir('.') print ('Files :', files)    print ('Matches :', fnmatch.filter(files, pattern))Output :$ python fnmatch_filter.py

Pattern : fnmatch_*.py
Files   : ['__init__.py', 'fnmatch_filter.py', 'fnmatch_fnmatch.py', 
'fnmatch_fnmatchcase.py', 'fnmatch_translate.py', 'index.rst']
Matches : ['fnmatch_filter.py', 'fnmatch_fnmatch.py',
'fnmatch_fnmatchcase.py', 'fnmatch_translate.py']
fnmatch.translate(pattern): This function returns the shell-style pattern converted to a regular expression for using with re.match() (re.match() will only match at the beginning of the string and not at the beginning of each line).# Python program to illustrate # fnmatch.translate(pattern) import fnmatch, re   regex = fnmatch.translate('*.txt') reobj = re.compile(regex)   print(regex) print(reobj.match('foobar.txt')) Output :'(?s:.*\\.txt)\\Z'
_sre.SRE_Match object; span=(0, 10), match='foobar.txt'

fnmatch.fnmatch(filename, pattern): This function tests whether the given filename string matches the pattern string and returns a boolean value. If the operating system is case-insensitive, then both parameters will be normalized to all lower-case or upper-case before the comparison is performed.Example: Script to search all files starting with ‘fnmatch’ and ending in ‘.py’# Python program to illustrate # fnmatch.fnmatch(filename, pattern) import fnmatch import os   pattern = 'fnmatch_*.py'print ('Pattern :', pattern )print()  files = os.listdir('.') for name in files:     print ('Filename: %-25s %s' % (name, fnmatch.fnmatch(name, pattern))Output :$ python fnmatch_fnmatch.py

Pattern : fnmatch_*.py

Filename: __init__.py               False
Filename: fnmatch_filter.py         True
Filename: fnmatch_fnmatch.py        True
Filename: fnmatch_fnmatchcase.py    True
Filename: fnmatch_translate.py      True
Filename: index.rst                 False

Example: Script to search all files starting with ‘fnmatch’ and ending in ‘.py’
# Python program to illustrate # fnmatch.fnmatch(filename, pattern) import fnmatch import os   pattern = 'fnmatch_*.py'print ('Pattern :', pattern )print()  files = os.listdir('.') for name in files:     print ('Filename: %-25s %s' % (name, fnmatch.fnmatch(name, pattern))
Output :
$ python fnmatch_fnmatch.py

Pattern : fnmatch_*.py

Filename: __init__.py               False
Filename: fnmatch_filter.py         True
Filename: fnmatch_fnmatch.py        True
Filename: fnmatch_fnmatchcase.py    True
Filename: fnmatch_translate.py      True
Filename: index.rst                 False

fnmatch.fnmatchcase(filename, pattern): This function performs the case sensitive comparison and tests whether the given filename string matches the pattern string and returns a boolean value.Example: Script for a case-sensitive comparison, regardless of the filesystem and operating system settings.# Python program to illustrate # fnmatch.fnmatchcase(filename, pattern) import fnmatch import os   pattern = 'FNMATCH_*.PY'print ('Pattern :', pattern) print()  files = os.listdir('.')   for name in files:     (print 'Filename: %-25s %s' % (name, fnmatch.fnmatchcase(name, pattern)))Output :$ python fnmatch_fnmatchcase.py

Pattern : FNMATCH_*.PY

Filename: __init__.py               False
Filename: fnmatch_filter.py         False
Filename: FNMATCH_FNMATCH.PY        True
Filename: fnmatch_fnmatchcase.py    False
Filename: fnmatch_translate.py      False
Filename: index.rst                 False

Example: Script for a case-sensitive comparison, regardless of the filesystem and operating system settings.
# Python program to illustrate # fnmatch.fnmatchcase(filename, pattern) import fnmatch import os   pattern = 'FNMATCH_*.PY'print ('Pattern :', pattern) print()  files = os.listdir('.')   for name in files:     (print 'Filename: %-25s %s' % (name, fnmatch.fnmatchcase(name, pattern)))
Output :
$ python fnmatch_fnmatchcase.py

Pattern : FNMATCH_*.PY

Filename: __init__.py               False
Filename: fnmatch_filter.py         False
Filename: FNMATCH_FNMATCH.PY        True
Filename: fnmatch_fnmatchcase.py    False
Filename: fnmatch_translate.py      False
Filename: index.rst                 False

fnmatch.filter(names, pattern): This function returns the subset of the list of names passed in the function that match the given pattern.Example: Filter files by more than one file extension.# Python program to illustrate # fnmatch.filter(names, pattern) import fnmatch import os    pattern = 'fnmatch_*.py'print ('Pattern :', pattern )   files = os.listdir('.') print ('Files :', files)    print ('Matches :', fnmatch.filter(files, pattern))Output :$ python fnmatch_filter.py

Pattern : fnmatch_*.py
Files   : ['__init__.py', 'fnmatch_filter.py', 'fnmatch_fnmatch.py', 
'fnmatch_fnmatchcase.py', 'fnmatch_translate.py', 'index.rst']
Matches : ['fnmatch_filter.py', 'fnmatch_fnmatch.py',
'fnmatch_fnmatchcase.py', 'fnmatch_translate.py']

Example: Filter files by more than one file extension.
# Python program to illustrate # fnmatch.filter(names, pattern) import fnmatch import os    pattern = 'fnmatch_*.py'print ('Pattern :', pattern )   files = os.listdir('.') print ('Files :', files)    print ('Matches :', fnmatch.filter(files, pattern))
Output :
$ python fnmatch_filter.py

Pattern : fnmatch_*.py
Files   : ['__init__.py', 'fnmatch_filter.py', 'fnmatch_fnmatch.py', 
'fnmatch_fnmatchcase.py', 'fnmatch_translate.py', 'index.rst']
Matches : ['fnmatch_filter.py', 'fnmatch_fnmatch.py',
'fnmatch_fnmatchcase.py', 'fnmatch_translate.py']

fnmatch.translate(pattern): This function returns the shell-style pattern converted to a regular expression for using with re.match() (re.match() will only match at the beginning of the string and not at the beginning of each line).# Python program to illustrate # fnmatch.translate(pattern) import fnmatch, re   regex = fnmatch.translate('*.txt') reobj = re.compile(regex)   print(regex) print(reobj.match('foobar.txt')) Output :'(?s:.*\\.txt)\\Z'
_sre.SRE_Match object; span=(0, 10), match='foobar.txt'

# Python program to illustrate # fnmatch.translate(pattern) import fnmatch, re   regex = fnmatch.translate('*.txt') reobj = re.compile(regex)   print(regex) print(reobj.match('foobar.txt')) 
Output :
'(?s:.*\\.txt)\\Z'
_sre.SRE_Match object; span=(0, 10), match='foobar.txt'

This article is contributed by Aditi Gupta. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Python-Library
python-regex
Python
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Python Dictionary
Read a file line by line in Python
Enumerate() in Python
How to Install PIP on Windows ?
Iterate over a list in Python
Different ways to create Pandas Dataframe
Python String | replace()
Python program to convert a list to string
Reading and Writing to text files in Python
sum() function in Python