在python中读取大型zip文件(而非内部文件)

时间:2020-08-12 15:18:43

标签: python zipfile

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

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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