यहां हम देखेंगे कि पायथन का उपयोग करके हम यूनिक्स शेल स्टाइल पैटर्न मैचिंग तकनीक कैसे प्राप्त कर सकते हैं। fnmatch नामक एक मॉड्यूल है, जिसका उपयोग कार्य करने के लिए किया जाता है। यह मॉड्यूल फाइल नाम की तुलना एक पैटर्न से करता है, फिर मिलान के अनुसार True या False लौटाता है।
इसका उपयोग करने के लिए सबसे पहले हमें fnmatch स्टैंडर्ड लाइब्रेरी मॉड्यूल को आयात करने की आवश्यकता है।
import fnmatch
यूनिक्स टर्मिनल में, पैटर्न मिलान के लिए कुछ वाइल्डकार्ड्स हैं। ये नीचे दिए गए हैं:
- '*' एस्टेरिस्क का उपयोग सब कुछ मिलान करने के लिए किया जाता है।
- '?' क्वेश्चन मार्क एक सिंगल कैरेक्टर मिलान करने के लिए है।
- [seq] सीक्वेंस का उपयोग क्रम में वर्णों से मिलान करने के लिए किया जाता है।
- [!seq] नॉट इन सीक्वेंस का उपयोग उन वर्णों से मिलान करने के लिए किया जाता है जो सीक्वेंस में मौजूद नहीं हैं।
यदि हम एस्टेरिस्क या क्वेश्चन मार्क्स को कैरेक्टर के रूप में खोजना चाहते हैं, तो हमें उन्हें इस तरह उपयोग करना होगा: [*] या [?]
fnmatch() मेथड
fnmatch() मेथड दो आर्गुमेंट्स लेता है, ये फाइलनाम और पैटर्न हैं। यह फंक्शन जांचने के लिए उपयोग किया जाता है कि क्या फाइलनाम दिए गए पैटर्न से मेल खाता है या नहीं। जब ऑपरेटिंग सिस्टम केस-सेंसिटिव होता है, तो पैरामीटर्स को मिलान से पहले अपरकेस या लोअरकेस अक्षर में नॉर्मलाइज़ किया जाएगा।
उदाहरण कोड
import fnmatch
import os
file_pattern = 'test_f*'
files = os.listdir('./unix_files')
for filename in files:
print('File: {}\t: {}'.format(filename, fnmatch.fnmatch(filename, file_pattern)))
आउटपुट
$ python3 310.UNIX_filename.py File: test_file5.txt : True File: test_file2.png : True File: test_file1.txt : True File: another_file.txt : False File: TEST_FILE4.txt : False File: abc.txt : False File: test_file3.txt : True $
filter() मेथड
filter() मेथड भी दो पैरामीटर्स लेता है। पहला नामों का है, और दूसरा पैटर्न का है। यह पैटर्न सभी फाइलनामों की सूची से मिलान वाले फाइलनामों की सूची खोजता है।
उदाहरण कोड
import fnmatch
import os
file_pattern = 'test_f*'
files = os.listdir('./unix_files')
match_file = fnmatch.filter(files, file_pattern)
print('All files:' + str(files))
print('\nMatched files:' + str(match_file))
आउटपुट
$ python3 310.UNIX_filename.py All files:['test_file5.txt', 'test_file2.png', 'test_file1.txt', 'another_file.txt', 'TEST_FILE4.txt', 'abc.txt', 'test_file3.txt'] Matched files:['test_file5.txt', 'test_file2.png', 'test_file1.txt', 'test_file3.txt'] $
translate() मेथड
translate() मेथड एक पैरामीटर लेता है। पैरामीटर एक पैटर्न है। हम इस फंक्शन का उपयोग शेल स्टाइल पैटर्न को पायथन में रेगुलर एक्सप्रेशन्स का उपयोग करके मिलान करने के लिए दूसरे प्रकार के पैटर्न में बदलने के लिए कर सकते हैं।
उदाहरण कोड
import fnmatch, re
file_pattern = 'test_f*.txt'
unix_regex = fnmatch.translate(file_pattern)
regex_object = re.compile(unix_regex)
print('Regular Expression:' + str(unix_regex))
print('Match Object:' + str(regex_object.match('test_file_abcd123.txt')))
आउटपुट
$ python3 310.UNIX_filename.py Regular Expression:(?s:test_f.*\.txt)\Z Match Object:<_sre.SRE_Match object; span=(0, 21), match='test_file_abcd123.txt'> $