将大型二进制文件转换为十六进制(binascii.hexlify返回MemoryError)

时间:2015-06-19 14:28:09

标签: python

我正在尝试将一个大文件(~1GB)转换为带有binascii的十六进制字符串(在较小的文件上效果很好),但它会导致MemoryError。

这是我正在使用的代码:

import binascii

filePath = "demo/11.mp4.zip"

file = open(filePath, "rb")
with file:
    byte = file.read()
    hexa = binascii.hexlify(byte)

hexa_string = hexa.decode('ascii');

任何建议?

2 个答案:

答案 0 :(得分:2)

实际上你大约使用3 GB的内存将文件及其十六进制存储在bytehexa变量中,而不是你可以在你的文件中迭代并根据块处理它

答案 1 :(得分:2)

用chucks读取你的文件:

import binascii

file_path = 'demo/11.mp4.zip'

chunk_size = 1024
with open(file_path, 'rb') as f:
    while True:
        data = f.read(chunk_size)
        if not data:
            break
        hexa = binascii.hexlify(data)
        hexa_string = hexa.decode('ascii')
        # work with hex string