我正在尝试将一个大文件(~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');
任何建议?
答案 0 :(得分:2)
实际上你大约使用3 GB的内存将文件及其十六进制存储在byte
和hexa
变量中,而不是你可以在你的文件中迭代并根据块处理它
答案 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