在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。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...