Oui, je pense que le hachage du fichier serait le meilleur moyen si vous deviez comparer plusieurs fichiers et stocker des hachages pour une comparaison ultérieure. Comme le hachage peut se heurter, une comparaison octet par octet peut être effectuée en fonction du cas d'utilisation.
Généralement, la comparaison octet par octet serait suffisante et efficace, ce que fait déjà le module filecmp +.
Voir http://docs.python.org/library/filecmp.html par exemple.
>>> import filecmp
>>> filecmp.cmp('file1.txt', 'file1.txt')
True
>>> filecmp.cmp('file1.txt', 'file2.txt')
False
considération de vitesse: Habituellement, si seulement deux fichiers doivent être comparés, les hachant et les comparant seraient plus lents au lieu de comparaison simple octet par octet si fait efficacement. par exemple. Le code ci-dessous essaie de chronométrer le hash par rapport à byte by byte
Avertissement: ce n'est pas la meilleure façon de chronométrer ou de comparer deux algo. et il y a besoin d'améliorations, mais cela donne une idée approximative. Si vous pensez qu'il devrait être amélioré dites-moi que je vais le changer.
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
et la sortie est
cmpHash 0.234999895096
cmpByteByByte 0.0
C'est un double de http://stackoverflow.com/questions/ 254350 – pufferfish