直到知道我使用以下代码读取zip文件:
try:
with open("asset.zip", "rb") as f:
bytes_of_file = f.read()
encoded = base64.b64encode(bytes_of_file)
效果很好,然后我尝试使用大型zip文件(大于1GB),但出现内存错误。 我尝试使用一些在互联网上看到的解决方案:
with zipfile.ZipFile("asset.zip", "rb") as z:
with z.open(...) as f:
bytes_of_file = f.read()
encoded = base64.b64encode(bytes_of_file)
但是zipfile必须在zip中打开一些文件的问题,只有这样我才能阅读。 我想阅读zip文件本身并对其进行编码。我该怎么办?
谢谢!
答案 0 :(得分:1)
如果文件太大而无法容纳在内存中,则需要一点一点地将其流式传输到输出文件。打开输入文件进行读取,输出文件进行写入(均为二进制模式)。然后从输入文件中读取固定大小的块,对其进行编码,然后将其写入输出。
诀窍是正确选择块大小,否则base64将在输出块的末尾添加填充(=
字符),通常仅在base64编码的字节字符串的末尾有效。 4 * 6位= 24位= 3个输入字节被编码为4个完整字节的输出而没有填充,因此您的块大小必须是3的倍数,例如3 * 1024 * 1024字节= 3 MiB。