我遇到了以下问题。 我正在使用低内存(1 GB)的小型机器。 我的程序从一些网址下载一个巨大的gzip文件。我需要将其解压缩为 dict 我确定该文件是 json 格式。 我的问题是,在运行以下命令后,我遇到了内存错误:
data = zlib.decompress(url, 16 + zlib.MAX_WBITS).decode('utf8')
results_list.append(json.loads(data ))
现在对于小文件这很好用,但是对于大文件我得到了错误。 我的直觉告诉我,我应该将文件拆分成块,但是因为我期待一个json文件,我不能将块恢复回json(因为每个部分都不是一个有效的json字符串)。
我该怎么办?非常感谢!
答案 0 :(得分:2)
使用z=zlib.decompressobj()
创建解压缩对象,然后执行z.decompress(some_compressed_data, max)
,这将返回不超过max
字节的未压缩数据。然后,您使用z.decompress(z.unconsumed_tail, max)
再次呼叫,直到剩余的some_compressed_data
消耗完为止,然后为其提供更多压缩数据。
然后,您需要能够一次处理一个块的结果未压缩数据。