Ответ 1
Да, я думаю, что хэш файл будет лучшим способом, если вам придется сравнивать несколько файлов и хранить хэши для последующего сравнения. Поскольку хэш может столкнуться, сравнение побайтов может быть выполнено в зависимости от варианта использования.
В целом сравнение побайтовое число будет достаточно и эффективным, какой модуль filecmp уже выполняет + другие вещи.
См. http://docs.python.org/library/filecmp.html например.
>>> import filecmp
>>> filecmp.cmp('file1.txt', 'file1.txt')
True
>>> filecmp.cmp('file1.txt', 'file2.txt')
False
Учет скорости: Обычно, если сравнивать только два файла, их хэширование и сравнение их будут медленнее вместо простого побайтового сравнения, если это будет сделано эффективно. например код ниже пытается использовать время hash vs by by by by by
Отказ от ответственности: это не лучший способ синхронизации или сравнения двух алгоритмов. и есть необходимость в улучшениях, но это дает приблизительную идею. Если вы думаете, что это должно быть улучшено, скажите мне, что я изменю его.
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