हां, मुझे लगता है कि फ़ाइल को हैशिंग करना सबसे अच्छा तरीका होगा यदि आपको बाद में तुलना के लिए कई फाइलों और स्टोर हैंश की तुलना करना है। चूंकि हैश संघर्ष कर सकता है, उपयोग के मामले के आधार पर बाइट-बाय-बाइट तुलना की जा सकती है।
आम तौर पर बाइट-बाय-बाइट तुलना पर्याप्त और कुशल होगी, जो filecmp मॉड्यूल पहले से ही अन्य चीजें भी करता है।
http://docs.python.org/library/filecmp.html उदा।
>>> import filecmp
>>> filecmp.cmp('file1.txt', 'file1.txt')
True
>>> filecmp.cmp('file1.txt', 'file2.txt')
False
स्पीड विचार: आमतौर पर यदि केवल दो फ़ाइलों तुलना करने के लिए, उन्हें hashing और की तुलना में उन्हें धीमी बजाय सरल बाइट-दर-बाइट तुलना की अगर कुशलता से किया हो जाएगा। जैसे नीचे कोड हैश बनाम हैट बनाम बाइट-बाय-बाइट
अस्वीकरण: यह समय या दो अलगो की तुलना करने का सबसे अच्छा तरीका नहीं है। और सुधार की आवश्यकता है लेकिन यह किसी न किसी विचार को देता है। अगर आपको लगता है कि इसे सुधारना चाहिए तो मुझे बताओ कि मैं इसे बदल दूंगा।
import random
import string
import hashlib
import time
def getRandText(N):
return "".join([random.choice(string.printable) for i in xrange(N)])
N=1000000
randText1 = getRandText(N)
randText2 = getRandText(N)
def cmpHash(text1, text2):
hash1 = hashlib.md5()
hash1.update(text1)
hash1 = hash1.hexdigest()
hash2 = hashlib.md5()
hash2.update(text2)
hash2 = hash2.hexdigest()
return hash1 == hash2
def cmpByteByByte(text1, text2):
return text1 == text2
for cmpFunc in (cmpHash, cmpByteByByte):
st = time.time()
for i in range(10):
cmpFunc(randText1, randText2)
print cmpFunc.func_name,time.time()-st
और आउटपुट
cmpHash 0.234999895096
cmpByteByByte 0.0
स्रोत
2009-07-02 04:56:13
यह http://stackoverflow.com/questions/ का डुप्लिकेट है है से बचने के लिए 254350 – pufferfish