У меня есть этот код:
def createDiff(newFile, oldFile):
diff = {}
with open(oldFile, "rb") as oldFile, open(newFile, "rb") as newFile:
oldBytes = bytearray(oldFile.read())
newBytes = bytearray(newFile.read())
i=0
for byte in oldBytes:
if len(oldBytes) < i:
if len(newBytes) < i:
break
else:
diff[i] = ["-", byte]
i += 1
continue
if len(newBytes) < i:
if len(oldBytes) < i:
break
else:
diff[i] = ["+", byte]
i += 1
continue
print(i)
if byte == newBytes[i]:
pass
else:
diff[i] = ["+", newBytes[i]]
diff[i] = ["+", byte]
i += 1
return lzma.compress(json.dumps(diff).encode())
Эта функция принимает 2 входа, оба пути к двоичным файлам, и пытается создать разность между ними. Теперь это прекрасно работает для небольших исполняемых файлов, но большие двоичные файлы занимают вечность. Есть ли более быстрый способ перебора байтов, который я еще не нашел? Или мой алгоритм некорректен? Может быть, я должен разделить bytearray на более мелкие куски и проанализировать каждый из них? Спасибо заранее за вашу помощь!