এখানে আমরা পাইথন ব্যবহার করে ইউনিক্স শেল স্টাইল প্যাটার্ন ম্যাচিং কৌশলগুলি কিভাবে পেতে পারি তা দেখব। fnmatch নামে একটি মডিউল আছে , যা কাজ করতে ব্যবহৃত হয়। এই মডিউলটি একটি প্যাটার্নের সাথে ফাইলের নাম তুলনা করতে ব্যবহৃত হয়, তারপর মিল অনুসারে সত্য বা মিথ্যা ফেরত দেয়।
প্রথমে এটি ব্যবহার করার জন্য আমাদের এটিকে 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 $
ফিল্টার() পদ্ধতি
ফিল্টার() পদ্ধতিতেও দুটি প্যারামিটার লাগে। প্রথমটি হল নাম, এবং দ্বিতীয়টি হল প্যাটার্ন৷ এই প্যাটার্নটি সমস্ত ফাইলের নামের তালিকা থেকে মিলে যাওয়া ফাইলের নামের তালিকা খুঁজে পায়।
উদাহরণ কোড
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() পদ্ধতিতে একটি প্যারামিটার লাগে। প্যারামিটারটি একটি প্যাটার্ন। আমরা পাইথনে রেগুলার এক্সপ্রেশন ব্যবহার করে শেল স্টাইল প্যাটার্নকে অন্য ধরনের প্যাটার্নে রূপান্তর করতে এই ফাংশনটি ব্যবহার করতে পারি।
উদাহরণ কোড
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'> $