解压缩巨大的json gzip文件导致python中的内存错误

时间:2017-09-29 10:23:06

标签: json python-3.x gzip zlib

我遇到了以下问题。 我正在使用低内存(1 GB)的小型机器。 我的程序从一些网址下载一个巨大的gzip文件。我需要将其解压缩为 dict 我确定该文件是 json 格式。 我的问题是,在运行以下命令后,我遇到了内存错误

data = zlib.decompress(url, 16 + zlib.MAX_WBITS).decode('utf8')
results_list.append(json.loads(data ))

现在对于小文件这很好用,但是对于大文件我得到了错误。 我的直觉告诉我,我应该将文件拆分成块,但是因为我期待一个json文件,我不能将块恢复回json(因为每个部分都不是一个有效的json字符串)。

我该怎么办?

非常感谢!

1 个答案:

答案 0 :(得分:2)

使用z=zlib.decompressobj()创建解压缩对象,然后执行z.decompress(some_compressed_data, max),这将返回不超过max字节的未压缩数据。然后,您使用z.decompress(z.unconsumed_tail, max)再次呼叫,直到剩余的some_compressed_data消耗完为止,然后为其提供更多压缩数据。

然后,您需要能够一次处理一个块的结果未压缩数据。