Python迭代大型json文件

时间:2016-07-31 00:02:53

标签: python json django

所以我最近一直试图通过创建一个网站来学习如何使用django,该网站使用户能够创建魔法收集套牌。这个问题与python有关,而不是django框架本身。

无论如何我试图解析一个包含大约200套MTG的巨大json文件,每组有多张卡,然后该卡有多种类型,你可以从下图中看到,所以它是一个相当复杂的数据结构。

enter image description here

现在,解析所有数据的当前正在使用for循环:

def InsertFormats():
    json_object = setJson()
    for sets in json_object:
        for cards in json_object[sets]['cards']:
            if 'legalities' in cards:
                for legalities in cards['legalities']:
                    cardFormat = legalities['format']
                    legalType = legalities['legality']
                    obj, created = CardFormat.objects.get_or_create(cardFormat=cardFormat)
                    obj, created = LegalTypes.objects.get_or_create(legalType=legalType)

但问题是它会随机出现此错误

  

处理完成,退出代码为-1073741819

我只假设由于此功能正在进行的迭代量而发生。我有这样的多个函数来将数据从json对象插入到我的数据库中。

有没有其他方法可以遍历一个大的json对象而不需要经过这么多的for循环来获取我需要的数据或至少以便它不会崩溃?

1 个答案:

答案 0 :(得分:0)

这是内存分配错误。 Python dicts不能很好地分配具有大型数据集的内存。

您可以尝试其他容器数据类型。作为namedtuples(比dict更轻):

from collections import namedtuple
import json

with open(yourfile) as f:
    json_object = json.load(
        f,
        object_hook = lambda x: namedtuple('JsonObject', x.keys())(**x)
    )

或尝试:http://bugs.python.org/issue9520