Sí, creo que el archivo de hash sería la mejor manera si tiene que comparar varios archivos y almacenar hash para una comparación posterior. Como el hash puede entrar en conflicto, se puede hacer una comparación byte a byte dependiendo del caso de uso.
En general, la comparación byte a byte sería suficiente y eficiente, que módulo filecmp ya hace + otras cosas también.
Ver http://docs.python.org/library/filecmp.html e.g.
>>> import filecmp
>>> filecmp.cmp('file1.txt', 'file1.txt')
True
>>> filecmp.cmp('file1.txt', 'file2.txt')
False
velocidad consideración: Por lo general, si sólo hay dos archivos tienen que compararse, hash ellos y compararlos sería más lento en lugar de la simple comparación byte a byte si se hace de manera eficiente. p.ej. el siguiente código intenta calcular el tiempo hash vs byte a byte
Descargo de responsabilidad: esta no es la mejor manera de sincronizar o comparar dos algo. y hay necesidad de mejoras, pero da una idea aproximada. Si crees que debería mejorar, dime que lo cambiaré.
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
y la salida es
cmpHash 0.234999895096
cmpByteByByte 0.0
Este es un duplicado de http://stackoverflow.com/questions/ 254350 – pufferfish