পাইথনের স্ট্যান্ডার্ড লাইব্রেরিতে filecmp মডিউল রয়েছে যা ফাইল ও ডিরেক্টরি তুলনার জন্য ফাংশন সংজ্ঞায়িত করে। এই তুলনা ফাইলগুলোর প্রোপার্টির পাশাপাশি তাদের ডেটাও বিবেচনা করে।
এই আর্টিকেলের উদাহরণ কোডগুলো নিচের ফাইল ও ডিরেক্টরি স্ট্রাকচার ব্যবহার করে।
কারেন্ট ওয়ার্কিং ডিরেক্টরির নিচে dir1 এবং dir2 নামে দুটি ডিরেক্টরি তৈরি করা হয়েছে। এগুলো নিচের ফাইলগুলো ধারণ করে:
--dir1/newfile.txt-- This is a file in dir1 --dir1/file1.txt-- Hello Python --dir1/file2.txt-- Python Standard Library --dir2/file1.txt-- Hello Python --dir2/file2.txt-- Python Library
এখন filecmp মডিউলের বিভিন্ন তুলনা ফাংশনগুলো বর্ণনা করা হলো।
filecmp.cmp(f1, f2, shallow=True)
এই ফাংশনটি দুটি ফাইল তুলনা করে এবং সেগুলো একই হলে True, না হলে False ফেরত দেয়। shallow প্যারামিটার ডিফল্টভাবে True। তাই ফাইল মেটাডেটা কন্টেন্টের পাশাপাশি তুলনার জন্য বিবেচিত হয়। shallow False সেট করলে শুধু কন্টেন্ট তুলনা হয়।
আমাদের ফাইল স্ট্রাকচার অনুযায়ী, নিচের কোড আউটপুট দেবে:
Differing files: ['file2.txt']
>>> filecmp.cmp('dir1/file1.txt', 'dir2/file1.txt')
True
>>> filecmp.cmp('dir1/file1.txt', 'dir2/file1.txt', shallow=False)
True
>>> filecmp.cmp('dir1/file2.txt', 'dir2/file2.txt')
False
filecmp.cmpfiles(dir1, dir2, shallow)
এই ফাংশনটি দুটি ডিরেক্টরির ফাইলগুলো তুলনা করে এবং তিন আইটেমের একটি টাপল ফেরত দেয়। টাপলের প্রথম আইটেম মিলিত ফাইলগুলোর লিস্ট, দ্বিতীয়টি অমিল ফাইলগুলোর লিস্ট, এবং তৃতীয়টি কমন ফাইলগুলোর লিস্ট।
>>> match, mismatch, errors = filecmp.cmpfiles('dir1', 'dir2', ['file1.txt', 'file2.txt'])
>>> match
['file1.txt']
>>> mismatch
['file2.txt']
>>> errors
[]
filecmp মডিউল dircmp ক্লাসও সংজ্ঞায়িত করে। এর অবজেক্ট ডিরেক্টরি তুলনার অবজেক্ট। এটি দুটি ডিরেক্টরির ফাইলগুলো তুলনা করে, যাদের বাম ও ডান ডিরেক্টরি হিসেবে চিহ্নিত করা হয়। অবজেক্টটি নিচের মেথডগুলো এক্সিকিউট করতে পারে:
filecmp.dircmp(a, b)
এটি কনস্ট্রাক্টর। a এবং b হলো তুলনা করার দুটি ডিরেক্টরি। ডিফল্টভাবে ডিরেক্টরিগুলোর সিস্টেম ফাইলগুলো লুকানো থাকে এবং তুলনায় উপেক্ষা করা হয়।
>>> result = filecmp.dircmp('dir1', 'dir2')
dircmp ক্লাসের অন্যান্য মেথডগুলো নিচের মতো:
report() মেথড
এই মেথডটি ডিরেক্টরি তুলনার ফলাফল প্রিন্ট করে।
>>> result = filecmp.dircmp('dir1', 'dir2')
>>> result.report()
diff dir1 dir2
Only in dir1: ['newfile.txt']
Identical files: ['file1.txt']
Differing files: ['file2.txt']
left, right প্রোপার্টি
এই প্রোপার্টিগুলো dircmp কনস্ট্রাক্টরের প্রথম ও দ্বিতীয় ডিরেক্টরির নাম প্রিন্ট করে।
>>> result.left 'dir1' >>> result.right 'dir2'
left_list, right_list
এই এট্রিবিউটগুলো দুটি ডিরেক্টরির ফাইলগুলোর লিস্ট ফেরত দেয়।
>>> result.left_list ['file1.txt', 'file2.txt', 'newfile.txt'] >>> result.right_list ['file1.txt', 'file2.txt']
common, common_files, common_dirs
এই এট্রিবিউটগুলো কমন ফাইল ও ডিরেক্টরি, শুধু কমন ফাইল, এবং শুধু কমন ডিরেক্টরি ফেরত দেয়।
>>> result.common ['file1.txt', 'file2.txt'] >>> result.common_files ['file1.txt', 'file2.txt'] >>> result.common_dirs []
same_files, diff_files
এই এট্রিবিউটগুলো dircmp ক্লাসে সংজ্ঞায়িত তুলনা অপারেটর ব্যবহার করে একই ফাইল ও ভিন্ন ফাইলগুলোর লিস্ট ফেরত দেয়।
>>> result.same_files ['file1.txt'] >>> result.diff_files ['file2.txt']
এই আর্টিকেলে dircmp ক্লাস, এর মেথডগুলো এবং filecmp মডিউলে সংজ্ঞায়িত ফাইল তুলনা ফাংশনগুলো আলোচনা করা হয়েছে।