অনেক সময় একটি প্রোগ্রামকে ফাইল সিস্টেমে ফাইলগুলোর একটি তালিকা মাধ্যমে ইটারেট করার প্রয়োজন পড়ে, প্রায়শই নাম একটি প্যাটার্নের সাথে ম্যাচ করে। glob মডিউল নির্দিষ্ট ডিরেক্টরিতে ফাইলগুলোর তালিকা তৈরি করার জন্য উপকারী, যেগুলোর একটি নির্দিষ্ট এক্সটেনশন থাকে, বা ফাইল নামের অংশ হিসেবে একটি নির্দিষ্ট স্ট্রিং থাকে।
glob মডিউল ফাংশনগুলো দ্বারা ব্যবহৃত প্যাটার্ন ম্যাচিং মেকানিজম UNIX পাথ এক্সপানশন রুলস ফলো করে। এই মডিউল তবে টিল্ডে (~) এবং শেল ভেরিয়েবল এক্সপান্ড করে না।
glob মডিউলে মূলত তিনটি ফাংশন আছে:
glob()
এই ফাংশন পাথনেম প্যারামিটারে দেওয়া প্যাটার্নের সাথে ম্যাচ করা ফাইলগুলোর একটি লিস্ট রিটার্ন করে। পাথনেম হতে পারে অ্যাবসোলিউট বা রিলেটিভ। এতে 와일্ডকার্ড ক্যারেক্টার যেমন * এবং ? থাকতে পারে।
এই ফাংশনের recursive প্যারামিটার ডিফল্টভাবে False। যদি True হয়, কারেন্ট ডিরেক্টরির সাবডিরেক্টরিগুলো রিকার্সিভলি সার্চ করা হয় প্যাটার্নের সাথে ম্যাচ করা ফাইল খুঁজে বের করতে।
নিচের কোড করেন্ট ডিরেক্টরির সকল '.py' এক্সটেনশনযুক্ত ফাইল প্রিন্ট করে।
>>> import glob
>>> for file in glob.glob("*.py"):
print(file)
নিচের কোডে, recursive=True প্যারামিটার সাবডিরেক্টরি থেকে '.py' এক্সটেনশনযুক্ত ফাইলগুলোকেও প্রিন্ট করে।
>>> for file in glob.glob("*.py", recursive=True):
print(file)
প্যাটার্ন পাথনেমে 와일্ডকার্ড ক্যারেক্টার ? থাকতে পারে। নিচের স্টেটমেন্ট তিন অক্ষরের নামের ফাইল প্রিন্ট করে যার প্রথম দুটি অক্ষর 'pp'।
>>> for file in glob.glob("pp?.py"):
print(file)
নিচের কোড তাদের প্রিন্ট করে যাদের নাম একটি ডিজিট দিয়ে শেষ হয়।
>>> for file in glob.glob('*[0-9].py'):
print(file)
নিচের সিনট্যাক্স দিয়ে দেওয়া পাথের সাথে ম্যাচ করা ফাইলগুলো রিকার্সিভলি প্রিন্ট করবে।
>>> glob.glob('**/*.py', recursive=True)
কারেন্ট ডিরেক্টরিতে ডিরেক্টরিগুলোর নাম রিকার্সিভলি প্রিন্ট করতে,
>>> glob.glob('tcl/**/', recursive=True)
iglob()
এই ফাংশন ফাইলগুলোর লিস্টের বদলে একটি জেনারেটর অবজেক্ট রিটার্ন করে। next() ফাংশন ব্যবহার করে পরবর্তী ফাইলনেমগুলো প্রিন্ট করা যায় নিচের মত।
>>> it = glob.iglob('*.py')
>>> type(it)
>>> while True:
try:
file = next(it)
print(file)
except StopIteration:
break
escape()
এই ফাংশন দেওয়া ক্যারেক্টারগুলো এস্কেপ করে। এটি তখন উপকারী যখন ফাইলগুলোর নামের অংশ হিসেবে নির্দিষ্ট ক্যারেক্টার থাকতে হবে। নিচের উদাহরণ chars স্ট্রিং-এর যেকোনো ক্যারেক্টার থাকা ফাইল সার্চ করে।
>>> chars = '[]()#'
>>> for char in chars:
esc = '*' + glob.escape(char) + '.py'
for file in (glob.glob(esc)):
print(file)
xyz[.py
pp[].py
pp(.py
pp#.py