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

3

我正在尝试使用binascii将一个大文件(约1GB)转换为十六进制字符串(对于较小的文件效果很好),但是它会导致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');

任何建议?

1
你想对结果(十六进制字符串)进行什么操作? - jfs
2个回答

3

分块读取文件:

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

2

实际上,您使用了约3 GB的内存来存储文件及其十六进制代码,使用了bytehexa变量。相反,您可以迭代处理文件并基于块进行处理。


最小要求为3 GB(一个字节对应2个十六进制数字)。逐行读取zip文件(二进制)或mp4文件(二进制)没有意义。你可能是想说可以将文件分块读取,而不是一次性全部读取。 - jfs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接