Python की स्टैंडर्ड लाइब्रेरी में 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 मॉड्यूल में डिफाइन फ़ाइल तुलना फ़ंक्शन्स पर चर्चा की गई है।