当前位置: 首页 > 面试题库 >

在Python中读取相当大的json文件

洪雅健
2023-03-14
问题内容

所以我有一些相当大的json编码文件。最小为300MB,但这是最小的。其余的为多个GB,从2GB到10GB +左右不等。

因此,当尝试使用Python加载文件时,似乎内存不足。我目前正在运行一些测试,以大致了解处理这些内容将花费多长时间,以了解从这里出发的去向。这是我用来测试的代码:

from datetime import datetime
import json

print datetime.now()

f = open('file.json', 'r')
json.load(f)
f.close()

print datetime.now()

毫不奇怪,Python给了我一个MemoryError。看来json.load()会调用json.loads(f.read()),后者首先尝试将整个文件转储到内存中,这显然行不通。

有什么办法可以解决这个问题吗?

我知道这很旧,但是我不认为这是重复的。虽然答案是相同的,但问题是不同的。在“重复”中,问题是如何有效地读取大文件,而这个问题处理的是甚至根本无法容纳到内存中的文件。效率不是必需的。


问题答案:

这里的问题是,JSON作为一种格式,通常会被完整解析,然后在内存中进行处理,这对于如此大量的数据显然是有问题的。

解决方案是将数据作为流使用-读取文件的一部分,进行处理,然后重复。

最好的选择似乎是使用ijson之类的东西
-一个将JSON作为流而不是作为块文件使用的模块。



 类似资料:
  • 问题内容: 我有点头疼,只是因为一个简单,易于表达的陈述使我的脸上有些错误。 我有一个名为的文件,如下所示: 我现在想读取文件。我发现了以下这些语句,但是不起作用: 控制台上显示的错误是这样的: 已编辑 从更改为 并得到了: 问题答案: 该方法( 中没有 )可以直接读取文件: 你正在使用方法,该方法仅用于字符串参数。 编辑:新消息是一个完全不同的问题。在这种情况下,该文件中存在一些无效的。为此,我

  • 问题内容: 我正在尝试使用该模块从python脚本读取json文件。经过一番谷歌搜索后,我发现以下代码: json文件的路径和名称在哪里。我收到以下错误: 问题答案: 该代码用作变量名。它将阴影您导入的模块引用。为变量使用其他名称。 除此之外,代码在接受字符串的同时传递文件对象。 传递文件内容: 或使用接受类似文件的对象。

  • 问题内容: 我有以下json文件。我想知道我应该将json文件放在我的项目中的位置以及如何读取和存储它。 问题答案: 将该文件放入资产中 。 对于在Android Studio项目中创建的项目,您需要在主文件夹下创建资产文件夹。 将该文件读取为: 然后您可以简单地通过此函数读取此返回 有关JSON的更多详细信息,请参见 http://www.vogella.com/articles/Android

  • 问题内容: 我目前正在尝试从Python 2.7中的.csv文件中读取数据,该文件最多包含100万行和200列(文件范围从100mb到1.6gb)。对于少于300,000行的文件,我可以(非常缓慢地)执行此操作,但是一旦超过该行,就会出现内存错误。我的代码如下所示: 在getstuff函数中使用else子句的原因是,所有符合条件的元素都将一起列在csv文件中,因此,经过它们以节省时间时,我离开了循

  • 那么,有没有其他方法来获得特定的键:值?

  • 问题内容: 我正在寻找一个JSON分析器,该分析器可以让我从大型JSON文件(大小为几百MB)中遍历JSON对象。我从Json.NET尝试了JsonTextReader,如下所示: 但是它在令牌之后返回令牌。 如果我需要整个对象而不是令牌,有没有更简单的方法? 问题答案: 假设您有一个与此类似的json数组: 我将为对象类型声明一个类 现在,反序列化部分 还有一个伪JsonConverter类来拦