কম্পিউটার টিউটোরিয়াল

পাইথনে ইউনিক্স ফাইলনেম প্যাটার্ন ম্যাচিং


এখানে আমরা দেখব কীভাবে পাইথন ব্যবহার করে ইউনিক্স শেল স্টাইল প্যাটার্ন ম্যাচিং কৌশল পাওয়া যায়। 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'>
$

  1. পাইথনে প্যাটার্ন প্রিন্ট করার পদ্ধতি

  2. পাইথনে ফাইলোট্যাক্সিস (Phyllotaxis) প্যাটার্ন তৈরি করুন

  3. পাইথনে Unix স্টাইল পাথনেম প্যাটার্ন এক্সপানশন (glob)

  4. রুবি প্যাটার্ন ম্যাচিং মাস্টার: একটি প্র্যাকটিক্যাল গাইড