fnmatch - сопоставление с шаблоном имени файла Unix в Python
Этот модуль используется для сопоставления подстановочных знаков в стиле оболочки Unix. fnmatch () сравнивает одно имя файла с шаблоном и возвращает ИСТИНА, если они совпадают, иначе возвращает ЛОЖЬ.
Сравнение чувствительно к регистру, если операционная система использует файловую систему с учетом регистра.
В подстановочных знаках в стиле оболочки используются следующие специальные символы и их функции:
- '*' - соответствует всему
- '?' - соответствует любому одиночному символу
- '[seq]' - соответствует любому символу в seq
- '[! seq]' - соответствует любому символу не в seq
Мета-символы должны быть заключены в скобки для буквального совпадения. Например, «[?]» Соответствует символу «?».
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"
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.
Attention geek! Strengthen your foundations with the Python Programming Foundation Course and learn the basics.
To begin with, your interview preparations Enhance your Data Structures concepts with the Python DS Course. And to begin with your Machine Learning Journey, join the Machine Learning – Basic Level Course