我遇到了以下问题。 我正在使用内存较低(1 GB)的小型机器。 我的程序从某个网址下载一个巨大的 gzip 文件。我需要将其解压缩为 dict 我确信该文件是 json 格式。 我的问题是,运行以下命令后出现内存错误:
data = zlib.decompress(url, 16 + zlib.MAX_WBITS).decode('utf8')
results_list.append(json.loads(data ))
现在对于小文件来说这工作正常,但是对于大文件我收到了错误。 我的直觉告诉我,我应该将文件分割成 block ,但是因为我期待一个 json 文件,所以我无法将 block 恢复为 json (因为每个部分都不是有效的 json 字符串)。
我应该做什么?
非常感谢!
最佳答案
使用z=zlib.decompressobj()
创建一个解压对象,然后执行z.decompress(some_compressed_data, max)
,这将返回不超过max
字节的未压缩数据。然后,您再次使用 z.decompress(z.unconsumed_tail, max)
进行调用,直到剩余的 some_compressed_data
被消耗,然后向其提供更多压缩数据。
然后您将需要能够一次处理一个 block 所产生的未压缩数据。
关于json - 解压缩巨大的 json gzip 文件导致 python 中的内存错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46486819/