读取python中的大型zip文件(而不是里面的文件)



直到我知道我用这个代码读取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文件本身并对其进行编码。我该怎么做?

谢谢!

如果文件太大,无法放入内存,则需要将其一点一点地流式传输到输出文件中。打开用于读取的输入文件和用于写入的输出文件(均为二进制模式(。然后从输入文件中读取一个固定大小的块,对其进行编码,并将其写入输出。

诀窍是正确选择块大小,否则base64将在输出块的末尾添加填充(=字符(,这些填充通常仅在base64编码的字节字符串的末尾有效。4*6位=24位=3字节的输入被编码为4个完整字节的输出,没有填充,因此块大小必须是3的倍数,例如3*1024*1024字节=3 MiB。

最新更新