Есть ли более быстрый способ перебора байтов в Python 3? - PullRequest
0 голосов
/ 20 марта 2020

У меня есть этот код:


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 на более мелкие куски и проанализировать каждый из них? Спасибо заранее за вашу помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...