यूनिक्स शेल कमांड लाइन्स में उपयोग किए जाने वाले वाइल्डकार्ड पैटर्न रेगुलर एक्सप्रेशन सिंटैक्स से अलग होते हैं। पायथन की स्टैंडर्ड लाइब्रेरी में fnmatch मॉड्यूल यूनिक्स वाइल्डकार्ड पैटर्न्स के लिए सपोर्ट प्रदान करता है।
fnmatch मॉड्यूल में निम्न फ़ंक्शन्स परिभाषित हैं:
fnmatch()
इस फ़ंक्शन को दो पैरामीटर्स की आवश्यकता होती है - फ़ाइल नाम और कैरेक्टर्स का स्ट्रिंग पैटर्न। फ़ाइल के नाम को दिए गए पैटर्न से मिलाया जाता है और फ़ंक्शन True या False लौटाता है।
निम्न उदाहरण करंट डायरेक्टरी से "*.py" पैटर्न से मेल खाने वाली सभी फ़ाइलों को सूचीबद्ध करता है।
>>> import glob, fnmatch
>>> for files in (glob.glob('*.*')):
... if (fnmatch.fnmatch(files, "*.py")):
... print(files)
fnmatchcase()
यह फ़ंक्शन fnmatch() के समान है। हालांकि यह फ़ंक्शन फ़ाइल नाम के साथ पैटर्न केस-सेंसिटिव मिलान करता है।
निम्न उदाहरण में, 'l' से शुरू होने वाले नाम और '.py' एक्सटेंशन वाली सभी फ़ाइलों को पहले फ़ाइलों लिस्ट ऑब्जेक्ट में एकत्र किया जाता है। fnmatch() फ़ंक्शन केवल 'lo' कैरेक्टर्स से शुरू होने वाले नामों को प्रिंट करने के लिए लागू किया जाता है।
>>> files = glob.glob("l*.*")
>>> files
['LICENSE.txt', 'lines.txt', 'listwidget.ui', 'lo1.ui', 'lo2.ui', 'lo3.ui', 'logo.png', 'logo.svg', 'lw.ui']
>>> for file in files:
... if fnmatch.fnmatchcase(file, "lo*.*") == True:
... print(file)
lo1.ui
lo2.ui
lo3.ui
logo.png
logo.svg
filter()
यह फ़ंक्शन केवल उन फ़ाइलों को लौटाता है जिनका नाम दिए गए पैटर्न पैरामीटर से मेल खाता है।
निम्न स्टेटमेंट करंट डायरेक्टरी में सभी फ़ाइलों में से '.txt' एक्सटेंशन वाली फ़ाइलों की सूची लौटाता है।
>>> fnmatch.filter(files, "*.txt") ['a!.txt', 'data().txt', 'dict.txt', 'json.txt', 'LICENSE.txt', 'lines.txt', 'msg.txt', 'NEWS.txt', 'test.txt', 'zen.txt', 'zen1.txt', 'zenbak.txt']
translate()
यह फ़ंक्शन UNIX स्टाइल पैटर्न को संबंधित RegEx फॉर्म में बदलने के लिए उपयोगी है। translate() फ़ंक्शन का रिटर्न मान re मॉड्यूल के compile() फ़ंक्शन का उपयोग करके रेगुलर एक्सप्रेशन में बदला जाना चाहिए। इसका उपयोग फिर पैटर्न मिलान के लिए किया जाता है।
>>> pattern = "*.txt"
>>> import re
>>> reg = fnmatch.translate(pattern)
>>> reg
'(?s:.*\\.txt)\\Z'
>>> rec = re.compile(reg)
>>> for file in glob.glob("*.*"):
... if re.match(rec, file):
... print(file)
इस लेख में fnmatch मॉड्यूल में फ़ंक्शन्स की व्याख्या की गई है।