समस्या।
आपको पायथन में फाइलों की तुलना करने की जरूरत है।
समाधान..
फ़ाइल और निर्देशिकाओं की तुलना करने के लिए पायथन में filecmp मॉड्यूल का उपयोग किया जा सकता है। 1.
cmp(file1, file2[, उथला])
filecmp फ़ाइल 1 और फ़ाइल 2 फ़ाइलों की तुलना करता है और समान होने पर सत्य लौटाता है, यदि नहीं तो गलत। डिफ़ॉल्ट रूप से, os.stat() द्वारा लौटाई गई समान विशेषताओं वाली फ़ाइलें समान मानी जाती हैं। यदि उथला प्रदान नहीं किया गया है (या सत्य है), तो समान स्टेट सिग्नेचर वाली फ़ाइलें समान मानी जाती हैं।
cmpfiles(dir1, dir2, आम[, उथला])
दो निर्देशिका dir1 और dir2 में सामान्य सूची में निहित फ़ाइलों की सामग्री की तुलना करता है। cmpfiles एक टपल देता है जिसमें तीन सूचियाँ होती हैं - मिलान, बेमेल, फ़ाइल नामों की त्रुटियाँ।
-
मैच - उन फाइलों को सूचीबद्ध करता है जो दोनों निर्देशिकाओं में समान हैं।
-
बेमेल - उन फाइलों को सूचीबद्ध करता है जो मेल नहीं खाते।
-
त्रुटियां - उन फ़ाइलों को सूचीबद्ध करती हैं जिनकी किसी कारण से तुलना नहीं की जा सकती।
dircmp(dir1, dir2 [, अनदेखा करें[, छुपाएं]])
एक निर्देशिका तुलना ऑब्जेक्ट बनाता है जिसका उपयोग निर्देशिका dir1 और dir2 पर विभिन्न तुलना संचालन करने के लिए किया जा सकता है।
-
अनदेखा करें - अनदेखा करने के लिए फ़ाइल नामों की सूची पर ध्यान न दें, ['RCS','CVS','tags'] का डिफ़ॉल्ट मान।
-
छुपाएं - छिपाने के लिए फ़ाइल नामों की सूची, डिफ़ॉल्ट सूची [os.curdir, os.pardir] (['।', '..'] UNIX पर।
filecmp.dircmp के उदाहरण निम्नलिखित विधियों को लागू करते हैं जो विस्तृत रिपोर्ट को sys.stdout पर प्रिंट करते हैं:
-
रिपोर्ट ():दो निर्देशिकाओं के बीच तुलना प्रिंट करता है।
-
रिपोर्ट_पार्टियल_क्लोजर ():दो निर्देशिकाओं के साथ-साथ दो
directories.
की तत्काल उपनिर्देशिकाओं की तुलना प्रिंट करता है। -
रिपोर्ट_फुल_क्लोजर ():दो निर्देशिकाओं, उनकी सभी उपनिर्देशिकाओं,
those subdirectories, and so on (i.e., recursively).
-
left_list:निर्देशिका पथ 1 में मिली फ़ाइलें और उपनिर्देशिकाएं, छुपा सूची के तत्वों को शामिल नहीं करती हैं।
-
राइट_लिस्ट:निर्देशिका पथ 2 में मिली फ़ाइलें और उपनिर्देशिकाएं, छुपासूची के तत्वों को शामिल नहीं करती हैं।
-
सामान्य:फ़ाइलें और उपनिर्देशिकाएँ जो निर्देशिका पथ1 और निर्देशिका पथ2 दोनों में हैं।
-
left_only:फ़ाइलें और उपनिर्देशिकाएं जो केवल पथ1 निर्देशिका में हैं।
-
right_only:फ़ाइलें और उपनिर्देशिकाएं जो केवल पथ2 निर्देशिका में हैं।
-
common_dirs:उपनिर्देशिकाएँ जो निर्देशिका पथ1 और निर्देशिका पथ2 दोनों में हैं।
-
common_files:फ़ाइलें जो निर्देशिका पथ1 और निर्देशिका पथ2 दोनों में हैं।
-
Same_files:उन फ़ाइलों के पथ जिनकी सामग्री निर्देशिका पथ1 और निर्देशिका पथ2 दोनों में समान है।
-
diff_files:उन फ़ाइलों के पथ जो निर्देशिका पथ1 और निर्देशिका पथ2 दोनों में हैं, लेकिन जिनकी सामग्री भिन्न है।
-
funy_files:उन फ़ाइलों के पथ जो निर्देशिका पथ1 और निर्देशिका पथ2 दोनों में हैं, लेकिन किसी कारण से उनकी तुलना नहीं की जा सकती।
-
subdirs:एक डिक्शनरी जो कॉमन_डीआईआर में नामों को dircmp ऑब्जेक्ट्स में मैप करती है।
तुलना के लिए परीक्षण डेटा तैयार करना।
आयात ओएस# परीक्षण डेटाडेफ मेकफ़ाइल (फ़ाइल नाम, पाठ =कोई नहीं) तैयार करें:"""फ़ंक्शन:कुछ फाइलपरम बनाएं:इनपुट फ़ाइल, बॉडी"""खुले (फ़ाइल नाम, 'डब्ल्यू') के साथ f:f.write( पाठ या फ़ाइल नाम)वापसी# परीक्षण डेटाडेफ़ मेकडायरेक्टरी (निर्देशिका_नाम) तैयार करें:"""फ़ंक्शन:निर्देशिका बनाएंपैरा:इनपुट निर्देशिका"""यदि नहीं तो os.path.exists(directory_name):os.mkdir(directory_name)# वर्तमान कार्यशील निर्देशिका प्राप्त करेंप्रेजेंट_डायरेक्टरी =os.getcwd()# निर्देशिका में परिवर्तन प्रदान करेंos.chdir(directory_name)# दो निर्देशिका बनाएं। mkdir('dir2/common_dir')# दो अलग-अलग उपनिर्देशिकाएं बनाएं। 'dir2/file_only_in_dir2')# निर्देशिकामेकफाइल ('dir1/common_file', 'हैलो, समान सामग्री लिखना') मेकफ़ाइल ('dir2/common_file', 'हैलो, समान सामग्री लिखना') में एक-एक फ़ाइल बनाएं। unqiue f डायरेक्टरीमेकफाइल ('dir1/not_the_same') मेकफाइल ('dir2/not_the_same') मेकफाइल ('dir1/file_in_dir1', 'यह dir1 में एक फाइल है') os.mkdir ('dir2/file_in_dir1') os.chdir में से प्रत्येक में एक है। (वर्तमान_निर्देशिका) वापसी __name__ =='__main__':os.chdir(os.getcwd())makedirectory('example')makedirectory('example/dir1/common_dir')makedirectory('example/dir2/common_dir')
-
filecmp उदाहरण filecmp उदाहरण चल रहा है। उथला तर्क cmp() को बताता है कि फ़ाइल की सामग्री को उसके मेटाडेटा के अलावा देखना है या नहीं।
डिफ़ॉल्ट रूप से os.stat() से उपलब्ध जानकारी का उपयोग करके उथली तुलना करना है। यदि परिणाम समान हैं, तो फ़ाइलों को समान माना जाता है। इस प्रकार, एक ही आकार की फ़ाइलें जो एक ही समय में बनाई गई थीं, एक ही रूप में रिपोर्ट की जाती हैं, भले ही उनकी सामग्री भिन्न हो।
जब उथला गलत होता है, तो फ़ाइल की सामग्री की हमेशा तुलना की जाती है।
आयात फ़ाइलcmpprint('आउटपुट \n *** सामान्य फ़ाइल:', अंत=' ')प्रिंट(filecmp.cmp('example/dir1/common_file','example/dir2/common_file'), end=' ' प्रिंट करें 'example/dir1/not_the_same', 'example/dir2/not_the_same'), end=' ')print(filecmp.cmp('example/dir1/not_the_same','example/dir2/not_the_same', उथले=गलत))प्रिंट ('** समान फ़ाइलें:', अंत=' ')प्रिंट(filecmp.cmp('example/dir1/file_only_in_dir1','example/dir1/file_only_in_dir1'), end='')print(filecmp.cmp(') उदाहरण/dir1/file_only_in_dir1', 'example/dir1/file_only_in_dir1', उथला=गलत))
आउटपुट
*** आम फाइल :ट्रू ट्रू
-
cmpfiles उदाहरण:
दो निर्देशिकाओं में फ़ाइलों के एक सेट की पुनरावर्ती के बिना तुलना करने के लिए cmpfiles() का उपयोग करें।
आयात फ़ाइलcmpimport os# दोनों निर्देशिकाओं में मौजूद वस्तुओं का निर्धारण करें। dir1_contents =set(os.listdir('example/dir1'))dir2_contents =set(os.listdir('example/dir2'))common =list( dir1_contents और dir2_contents)common_files =[f के लिए f आम में अगर os.path.isfile(os.path.join('example/dir1', f))]print(f' *** सामान्य फ़ाइलें हैं:{common_files}' )# अब, निर्देशिकाओं की तुलना करेंमैच, बेमेल, त्रुटियां =filecmp.cmpfiles('example/dir1','example/dir2',common_files,)print(f' *** मिलान की गई फ़ाइलें हैं:{मैच}')प्रिंट (f' *** बेमेल फ़ाइलें हैं:{बेमेल}') प्रिंट (f' *** त्रुटि फ़ाइलें हैं:{त्रुटियां}')
*** सामान्य फ़ाइलें हैं:['file_in_dir1', 'not_the_same', 'common_file']*** मेल खाने वाली फ़ाइलें हैं:['common_file']**** बेमेल फ़ाइलें हैं:['file_in_dir1', 'not_the_same' ]*** त्रुटि फ़ाइलें हैं:[]
7. निर्देशिकाओं की तुलना करना।
आयात filecmpdc =filecmp.dircmp('example/dir1', 'example/dir2')print(f"output \n *** प्रिंटिंग डिटेल रिपोर्ट:\n")प्रिंट(dc.report())print( f"\n")प्रिंट(dc.report_full_close())
आउटपुट
*** प्रिंटिंग डिटेल रिपोर्ट:diff example/dir1 example/dir2Only in example/dir1 :['dir_only_in_dir1', 'file_only_in_dir1'] केवल उदाहरण में/dir2 :['dir_only_in_dir2', 'file_only_in_dir2']आइडेंटिकल फाइल्स :[ 'common_file']भिन्न फ़ाइलें :['not_the_same']सामान्य उपनिर्देशिकाएं:['common_dir']आम अजीब मामले:['file_in_dir1'] Nonediff उदाहरण/dir1 उदाहरण/dir2केवल उदाहरण में/dir1:['dir_only_in_dir1', 'file_only_in_dir1'] केवल उदाहरण/dir2 में:['dir_only_in_dir2', 'file_only_in_dir2'] समान फ़ाइलें :['common_file'] भिन्न फ़ाइलें :['not_the_same'] सामान्य उपनिर्देशिकाएं :['common_dir'] सामान्य अजीब मामले:['file_in_dir1']भिन्न उदाहरण /dir1\common_dir example/dir2\common_dirCommon उपनिर्देशिकाएं:['dir1', 'dir2']diff example/dir1\common_dir\dir1 example/dir2\common_dir\dir1आइडेंटिकल फाइल्स :['common_file', 'file_in_dir1', 'file_only_in_dir1', 'not_the_same']सामान्य उपनिर्देशिकाएं :['common_dir', 'dir_only_in_dir1']diff example/dir1\common_dir\dir1\common_dir example/dir2\common_ dir\dir1\common_dirdiff उदाहरण/dir1\common_dir\dir1\dir_only_in_dir1 उदाहरण/dir2\common_dir\dir1\dir_only_in_dir1diff उदाहरण/dir1\common_dir\dir2 उदाहरण/dir2\common_dir\dir2पहचान फ़ाइलें :['common_file', 'file_only_same' ']सामान्य उपनिर्देशिकाएं :['common_dir', 'dir_only_in_dir2', 'file_in_dir1']diff example/dir1\common_dir\dir2\common_dir example/dir2\common_dir\dir2\common_dirdiff example/dir1\common_dir\dir2\dir_only_dir2 example/_in_dir2 उदाहरण common_dir\dir2\dir_only_in_dir2diff उदाहरण/dir1\common_dir\dir2\file_in_dir1 उदाहरण/dir2\common_dir\dir2\file_in_dir1कोई नहीं
प्रत्येक विधि कैसे व्यवहार करती है यह देखने के लिए आप आगे प्वाइंट 1 में उल्लिखित सभी आदेशों को आजमा सकते हैं।