【问题标题】:Memory Errors when reading the file in utf-8 format读取 utf-8 格式文件时出现内存错误
【发布时间】:2012-03-12 15:54:29
【问题描述】:

我有一个 1GB 的 json 文件,我想在 python 中使用 simplejson 解析它。所以我写了一个简单的代码如下,它工作正常

import simplejson
f=open('stem.json','r')
content=f.read()
data=simplejson.loads(content)

上面代码的问题是它没有读取'utf-8'格式的数据

所以我重写了如下代码

import simplejson 
import codecs
f=codecs.open('stem.json','r',encoding='utf-8')
content=f.read()
data=simplejson.loads(content)

上述代码的问题是它不会执行,内核正在“杀死”程序。

我觉得这个问题很奇怪,因为没有编码它可以工作,当我尝试用编码读取它时会占用大量内存

谁能告诉我这里发生了什么?

【问题讨论】:

  • 1GB 的 JSON?机会是不同的持久性机制在这里更合适。使用数据库怎么样? MemoryError 仅表示您的内存不足。
  • 是的,但是为什么只有当我使用不同的编码时才会出现 MemoryError 感谢您的回复
  • 将字符串解码为unicode 对象会消耗额外的内存,这并不奇怪。
  • 是的,我可能不得不改变读取文件的方式,但我不确定如何使用编码来实现
  • 哪一行导致内存不足?你可以直接从文件中加载 JSON 而不是使用中间字符串吗?

标签: python json utf-8


【解决方案1】:

您可以尝试正常打开文件并使用带有encoding 参数的simplejson.load(),而不是先将整个文件读入内存:

with open("stem.json", "r") as f:
    data = simplejson.load(f, encoding="utf-8")

正如我在上面的评论中所说,我认为真正的解决方案是使用不同的持久性后端,而不是序列化为 JSON。

【讨论】:

  • 是的,如你所说。感谢您的回答,但正如您所说,我需要迁移到比 JSON 更持久的后端。问题是我的大文件以 JSON 格式正确结构化,这就是我将其序列化为 JSON 的原因
猜你喜欢
  • 2018-10-13
  • 2011-03-20
  • 1970-01-01
  • 1970-01-01
  • 2012-04-14
  • 2020-03-19
  • 2021-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多