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

পাইথনে Unix ফাইলনেম প্যাটার্ন ম্যাচিং (fnmatch)

Unix শেল কমান্ড লাইনে ব্যবহৃত 와일্ডকার্ড প্যাটার্ন রেগুলার এক্সপ্রেশন সিনট্যাক্স থেকে ভিন্ন। পাইথনের স্ট্যান্ডার্ড লাইব্রেরিতে fnmatch মডিউল Unix 와일্ডকার্ড প্যাটার্নের সাপোর্ট প্রদান করে।

fnmatch মডিউলে নিচের ফাংশনগুলো সংজ্ঞায়িত:

fnmatch()

এই ফাংশন দুটি প্যারামিটার নেয় - ফাইল নাম এবং ক্যারেক্টার প্যাটার্নের একটি স্ট্রিং। ফাইলের নাম দেওয়া প্যাটার্নের সাথে ম্যাচ করা হয় এবং ফাংশন True বা False রিটার্ন করে।

নিচের উদাহরণ করেন্ট ডিরেক্টরি থেকে "*.py" প্যাটার্নের সাথে মিলে যাওয়া সকল ফাইল লিস্ট করে।

>>> import glob, fnmatch
>>> for files in (glob.glob('*.*')):
        if (fnmatch.fnmatch(files, "*.py")):
            print(files)

fnmatchcase()

এই ফাংশন fnmatch()-এর মতো। তবে এই ফাংশন ফাইল নামের সাথে প্যাটার্নের কেস-সেনসিটিভ ম্যাচিং করে।

নিচের উদাহরণে, 'l' দিয়ে শুরু হওয়া এবং '.py' এক্সটেনশনযুক্ত সকল ফাইল প্রথমে একটি files লিস্ট অবজেক্টে সংগ্রহ করা হয়। 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 স্টাইল প্যাটার্নকে সংশ্লিষ্ট রেগুলার এক্সপ্রেশন ফরমে রূপান্তর করতে উপকারী। 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 মডিউলের ফাংশনগুলো ব্যাখ্যা করা হয়েছে।

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

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

  3. পাইথনে দুটি ফাইল কনক্যাটেনেট করে নতুন ফাইল তৈরি করার পদ্ধতি

  4. পাইথনে একাধিক ফাইল মার্জ করে নতুন ফাইল তৈরি করার পদ্ধতি