首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ijson中解析json文件时出现内存问题

在ijson中解析json文件时出现内存问题
EN

Stack Overflow用户
提问于 2016-06-18 14:27:45
回答 3查看 1.4K关注 0票数 4

本教程https://www.dataquest.io/blog/python-json-tutorial/有一个600 run的文件,它们可以使用,但是当我运行他们的代码时

代码语言:javascript
复制
import ijson

filename = "md_traffic.json"
with open(filename, 'r') as f:
    objects = ijson.items(f, 'meta.view.columns.item')
    columns = list(objects)

我遇到了等待文件被读入ijson的10+分钟,我真的很困惑,这应该是合理的。不应该有解析吗?我是不是遗漏了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-06-18 14:59:54

这看起来像是教程的直接拷贝/粘贴:

https://www.dataquest.io/blog/python-json-tutorial/

它花费这么长时间的原因是围绕着list()函数输出的ijson.items。这实际上强制在返回任何结果之前对整个文件进行解析。利用ijson.items作为生成器的优势,几乎可以立即返回第一个结果:

代码语言:javascript
复制
import ijson

filename = "md_traffic.json"
with open(filename, 'r') as f:
    for item in ijson.items(f, 'meta.view.columns.item'):
        print(item)
        break

编辑:教程中的下一个步骤是print(columns[0]),这就是为什么我在答案中包括打印第一项的原因。另外,还不清楚问题是针对Python 2还是针对3,所以答案使用了在这两种情况下都起作用的语法,尽管这是不得体的。

票数 1
EN

Stack Overflow用户

发布于 2016-11-03 09:04:02

主要问题不是在解析后创建一个list (只将单个结果收集到一个结构中),而是使用ijson提供的默认纯python后端。

还有其他可以更快地使用的后端。在ijson主页中,将解释如何导入这些内容。yajl2_cffi后端是目前可用的最快的后端,但是我已经创建了一个新的yajl2_c后端(有一个拉请求等待验收),它的性能甚至更好。

在我的笔记本电脑(英特尔(R)Core(商标) i7-5600U)中,使用yajl2_cffi后端,您的代码运行时间约为1.5分钟。使用yajl2_c后端,它在~10.5秒(python 3)和~15秒(python2.7.12)内运行。

编辑:@lex-血汗砖当然也是对的,因为如果你只对列名感兴趣的话,你就可以迅速脱离循环。

票数 2
EN

Stack Overflow用户

发布于 2016-06-18 15:28:42

我试着运行你的代码,25分钟后我就把程序关掉了。所以是的,10分钟,它是合理的快速。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37898065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档