সমস্যা।
আপনাকে পাইথনে ফাইল তুলনা করতে হবে।
সমাধান..
পাইথনের ফাইলসিএমপি মডিউলটি ফাইল এবং ডিরেক্টরির তুলনা করতে ব্যবহার করা যেতে পারে। 1.
cmp(file1, file2[, shallow])
filecmp ফাইল 1 এবং ফাইল 2 তুলনা করে এবং অভিন্ন হলে True, না হলে False প্রদান করে। ডিফল্টরূপে, os.stat() দ্বারা প্রত্যাবর্তিত অভিন্ন বৈশিষ্ট্যযুক্ত ফাইলগুলিকে সমান হিসাবে বিবেচনা করা হয়। যদি অগভীর প্রদান না করা হয় (বা সত্য), একই স্ট্যাট স্বাক্ষরযুক্ত ফাইলগুলিকে সমান হিসাবে বিবেচনা করা হয়৷
cmpfiles(dir1, dir2, common[, shallow])
dir1 এবং dir2 দুটি ডিরেক্টরিতে সাধারণ তালিকায় থাকা ফাইলগুলির বিষয়বস্তুর তুলনা করে। cmpfiles তিনটি তালিকা সম্বলিত একটি টিপল প্রদান করে - মিল, অমিল, ফাইলের নামগুলির ত্রুটি৷
-
ম্যাচ - ফাইলগুলি তালিকাভুক্ত করে যা উভয় ডিরেক্টরিতে একই।
-
অমিল - মেলে না এমন ফাইলগুলির তালিকা করে৷
-
ত্রুটি - কোনো কারণে তুলনা করা যায়নি এমন ফাইলগুলিকে তালিকাভুক্ত করে৷
৷
dircmp(dir1, dir2 [, ignore[, hide]])
একটি ডিরেক্টরি তুলনা বস্তু তৈরি করে যা dir1 এবং dir2 ডিরেক্টরিতে বিভিন্ন তুলনা ক্রিয়া সম্পাদন করতে ব্যবহার করা যেতে পারে৷
-
উপেক্ষা করুন - উপেক্ষা করার জন্য ফাইলের নামের একটি তালিকা উপেক্ষা করে, ['RCS', 'CVS', 'tags'] এর ডিফল্ট মান।
-
লুকান - লুকানোর জন্য ফাইলের নামের তালিকা, ডিফল্ট তালিকা [os.curdir, os.pardir] (['.', '..'] UNIX-এ।
filecmp.dircmp-এর দৃষ্টান্তগুলি নিম্নলিখিত পদ্ধতিগুলি প্রয়োগ করে যা sys.stdout-এ বিশদ প্রতিবেদন প্রিন্ট করে:
-
রিপোর্ট() :দুটি ডিরেক্টরির মধ্যে একটি তুলনা প্রিন্ট করে।
-
report_partial_closure() :দুটি ডিরেক্টরির সাথে সাথে দুটি
directories.
এর তাৎক্ষণিক সাবডিরেক্টরির তুলনা প্রিন্ট করে। -
report_full_closure():দুটি ডিরেক্টরির একটি তুলনা প্রিন্ট করে, তাদের সমস্ত সাবডিরেক্টরি,
those subdirectories, and so on (i.e., recursively).
-
left_list:ফাইল এবং সাবডিরেক্টরিগুলি ডিরেক্টরি path1-এ পাওয়া যায়, হাইডেলিস্টের উপাদানগুলি অন্তর্ভুক্ত নয়৷
-
right_list:ডিরেক্টরি path2-এ ফাইল এবং সাবডিরেক্টরি পাওয়া যায়, হাইডেলিস্টের উপাদানগুলি অন্তর্ভুক্ত নয়।
-
সাধারণ:ফাইল এবং সাব-ডিরেক্টরি যা উভয় ডিরেক্টরি path1 এবং ডিরেক্টরি path2 তে রয়েছে।
-
left_only:ফাইল এবং সাব-ডিরেক্টরি যেগুলো শুধুমাত্র ডাইরেক্টরি path1 এ আছে।
-
right_only:ফাইল এবং সাব-ডিরেক্টরি যেগুলো শুধুমাত্র ডাইরেক্টরি path2 এ আছে।
-
common_dirs:সাব-ডিরেক্টরি যেগুলো ডাইরেক্টরি path1 এবং ডিরেক্টরি পাথ2 উভয়েই রয়েছে।
-
common_files:ফাইল যেগুলি ডিরেক্টরি path1 এবং ডিরেক্টরি path2 উভয়েই রয়েছে।
-
same_files:ফাইলগুলির পাথ যার বিষয়বস্তু ডিরেক্টরি path1 এবং ডিরেক্টরি path2 উভয় ক্ষেত্রেই অভিন্ন৷
-
diff_files:ফাইলের পাথ যেগুলো ডাইরেক্টরি path1 এবং ডিরেক্টরি path2 উভয়েই আছে কিন্তু যার বিষয়বস্তু আলাদা।
-
funny_files:ফাইলগুলির পাথ যেগুলি ডিরেক্টরি path1 এবং ডিরেক্টরি path2 উভয়েই রয়েছে কিন্তু কিছু কারণে তুলনা করা যায় না৷
-
subdirs:একটি অভিধান যা সাধারণ_dirs-এ dircmp অবজেক্টে নাম ম্যাপ করে।
তুলনার জন্য পরীক্ষার ডেটা প্রস্তুত করা হচ্ছে।
import os # prepare test data def makefile(filename,text=None): """ Function: make some files params : input file, body """ with open(filename, 'w') as f: f.write(text or filename) return # prepare test data def makedirectory(directory_name): """ Function: make directories params : input directory """ if not os.path.exists(directory_name): os.mkdir(directory_name) # Get current working directory present_directory = os.getcwd() # change to directory provided os.chdir(directory_name) # Make two directories os.mkdir('dir1') os.mkdir('dir2') # Make two same subdirectories os.mkdir('dir1/common_dir') os.mkdir('dir2/common_dir') # Make two different subdirectories os.mkdir('dir1/dir_only_in_dir1') os.mkdir('dir2/dir_only_in_dir2') # Make a unqiue file one each in directory makefile('dir1/file_only_in_dir1') makefile('dir2/file_only_in_dir2') # Make a unqiue file one each in directory makefile('dir1/common_file', 'Hello, Writing Same Content') makefile('dir2/common_file', 'Hello, Writing Same Content') # Make a non unqiue file one each in directory makefile('dir1/not_the_same') makefile('dir2/not_the_same') makefile('dir1/file_in_dir1', 'This is a file in dir1') os.mkdir('dir2/file_in_dir1') os.chdir(present_directory) return if __name__ == '__main__': os.chdir(os.getcwd()) makedirectory('example') makedirectory('example/dir1/common_dir') makedirectory('example/dir2/common_dir')
-
filecmp উদাহরণ চলমান filecmp উদাহরণ। অগভীর যুক্তি cmp() কে ফাইলের মেটাডেটা ছাড়াও এর বিষয়বস্তু দেখতে হবে কিনা তা বলে।
ডিফল্ট হল os.stat() থেকে পাওয়া তথ্য ব্যবহার করে একটি অগভীর তুলনা করা। ফলাফল একই হলে, ফাইল একই বিবেচনা করা হয়. এইভাবে, একই সময়ে তৈরি করা একই আকারের ফাইলগুলি একই হিসাবে রিপোর্ট করা হয়, এমনকি তাদের বিষয়বস্তু ভিন্ন হলেও।
যখন অগভীর মিথ্যা হয়, ফাইলের বিষয়বস্তু সবসময় তুলনা করা হয়।
import filecmp print('Output \n *** Common File :', end=' ') print(filecmp.cmp('example/dir1/common_file', 'example/dir2/common_file'), end=' ') print(filecmp.cmp('example/dir1/common_file', 'example/dir2/common_file', shallow=False)) print(' *** Different Files :', end=' ') print(filecmp.cmp('example/dir1/not_the_same', 'example/dir2/not_the_same'), end=' ') print(filecmp.cmp('example/dir1/not_the_same', 'example/dir2/not_the_same', shallow=False)) print(' *** Identical Files :', end=' ') print(filecmp.cmp('example/dir1/file_only_in_dir1', 'example/dir1/file_only_in_dir1'), end=' ') print(filecmp.cmp('example/dir1/file_only_in_dir1', 'example/dir1/file_only_in_dir1', shallow=False))
আউটপুট
*** Common File : True True *** Different Files : False False *** Identical Files : True True
-
cmpfiles উদাহরণ:
পুনরাবৃত্তি ছাড়াই দুটি ডিরেক্টরিতে ফাইলের একটি সেট তুলনা করতে cmpfiles() ব্যবহার করুন৷
import filecmp import os # Determine the items that exist in both directories. dir1_contents = set(os.listdir('example/dir1')) dir2_contents = set(os.listdir('example/dir2')) common = list(dir1_contents & dir2_contents) common_files = [f for f in common if os.path.isfile(os.path.join('example/dir1', f))] print(f' *** Common files are : {common_files}') # Now, let us compare the directories match, mismatch, errors = filecmp.cmpfiles( 'example/dir1', 'example/dir2', common_files,) print(f' *** Matched files are : {match}') print(f' *** mismatch files are : {mismatch}') print(f' *** errors files are : {errors}')
*** Common files are : ['file_in_dir1', 'not_the_same', 'common_file'] *** Matched files are : ['common_file'] *** mismatch files are : ['file_in_dir1', 'not_the_same'] *** errors files are : []
7. ডিরেক্টরির তুলনা করা।
import filecmp dc = filecmp.dircmp('example/dir1', 'example/dir2') print(f"output \n *** Printing detaile report: \n ") print(dc.report()) print(f"\n") print(dc.report_full_closure())
আউটপুট
*** Printing detaile report: diff example/dir1 example/dir2 Only in example/dir1 : ['dir_only_in_dir1', 'file_only_in_dir1'] Only in example/dir2 : ['dir_only_in_dir2', 'file_only_in_dir2'] Identical files : ['common_file'] Differing files : ['not_the_same'] Common subdirectories : ['common_dir'] Common funny cases : ['file_in_dir1'] None diff example/dir1 example/dir2 Only in example/dir1 : ['dir_only_in_dir1', 'file_only_in_dir1'] Only in example/dir2 : ['dir_only_in_dir2', 'file_only_in_dir2'] Identical files : ['common_file'] Differing files : ['not_the_same'] Common subdirectories : ['common_dir'] Common funny cases : ['file_in_dir1'] diff example/dir1\common_dir example/dir2\common_dir Common subdirectories : ['dir1', 'dir2'] diff example/dir1\common_dir\dir1 example/dir2\common_dir\dir1 Identical files : ['common_file', 'file_in_dir1', 'file_only_in_dir1', 'not_the_same'] Common subdirectories : ['common_dir', 'dir_only_in_dir1'] diff example/dir1\common_dir\dir1\common_dir example/dir2\common_dir\dir1\common_dir diff example/dir1\common_dir\dir1\dir_only_in_dir1 example/dir2\common_dir\dir1\dir_only_in_dir1 diff example/dir1\common_dir\dir2 example/dir2\common_dir\dir2 Identical files : ['common_file', 'file_only_in_dir2', 'not_the_same'] Common subdirectories : ['common_dir', 'dir_only_in_dir2', 'file_in_dir1'] diff example/dir1\common_dir\dir2\common_dir example/dir2\common_dir\dir2\common_dir diff example/dir1\common_dir\dir2\dir_only_in_dir2 example/dir2\common_dir\dir2\dir_only_in_dir2 diff example/dir1\common_dir\dir2\file_in_dir1 example/dir2\common_dir\dir2\file_in_dir1 None
প্রতিটি পদ্ধতি কীভাবে আচরণ করে তা দেখতে আপনি পয়েন্ট 1-এ উল্লিখিত সমস্ত কমান্ড চেষ্টা করতে পারেন।