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

标签 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 ))

现在对于小文件来说这工作正常,但是对于大文件我收到了错误。 我的直觉告诉我,我应该将文件分割成 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/

相关文章:

javascript - NodeJS 异步函数中的返回变量

javascript - 来自不同域的restful api的Ajax请求

python - PDF 文件操作(打开一个大的 pdf 文件,找到关键字,然后保存找到的页面,然后拆分这些页面并将它们合并为一个 pdf)

python - 给定列表创建无向图

caching - python 3 suds 缓存不工作

jquery - 如何在 asp.net 中使用 jQuery UI 自动完成

ios - 如何在 Swift 中使用 Codable 解码具有不同对象的 JSON 数组?

gzip - Perl6 : large gzipped files read line by line

javascript - Gzip 压缩的 javascript 没有得到正确的服务

http - HTTP 客户端指示 HTTP 服务器禁用 gzip 响应的规范方法是什么?