【问题标题】:decompressing huge json gzip file causing memory error in python解压巨大的json gzip文件导致python中的内存错误
【发布时间】:2018-03-11 05:46:25
【问题描述】:

我遇到了以下问题。 我正在使用内存不足(1 GB)的小型机器。 我的程序从某个 url 下载一个巨大的 gzip 文件。我需要将它解压缩为 dict 我确定该文件是 json 格式。 我的问题是,在我运行以下命令后,我得到了 memory error

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

现在对于小文件,这可以正常工作,但对于大文件,我得到了错误。 我的直觉告诉我应该将文件拆分成块,但是因为我期待一个 json 文件,所以我无法将块恢复为 json(因为每个部分都不是有效的 json 字符串)。

我该怎么办?

非常感谢!

【问题讨论】:

  • 无需将其拆分为夹头:使用手柄而不是字符串。
  • @WillemVanOnsem 能否详细说明请在哪里办理?
  • 一些身体?我完全迷失了......
  • 定义“巨大”..
  • 大约 200 mb。 @MarkAdler

标签: json python-3.x gzip zlib


【解决方案1】:

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

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

【讨论】:

  • 您好,非常感谢...您能解释一下您对 max 值的建议吗?以及如何访问解压后的数据,如何判断是否有未使用的_tail。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-01
  • 1970-01-01
  • 2016-07-16
相关资源
最近更新 更多