2016-07-31 142 views
0

因此,最近一直試圖通過創建一個網站,使用戶能夠創建聚會套牌的魔法,來學習如何使用django。這個問題更多地涉及到python,而不是django框架本身。Python迭代通過大json文件

無論如何,我試圖解析一個巨大的json文件,其中包含大約200套MTG,每套有多張卡片,然後該卡片有多種類型,因此您可以從下面的圖片中看到,所以它是一個相當複雜的數據結構。

enter image description here

現在目前whay IM分析所有的數據都使用這樣的循環:

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對象與出去需要經過這麼多的循環只是爲了達到我需要的數據或至少它不會崩潰?

+4

歡迎計算器。請不要發佈圖片。將你的json的樣本作爲文本發佈,以便有興趣的人可以試試它 – e4c5

+0

這可能是一個內存分配錯誤(對Python中迭代次數沒有限制)。看到下面的帖子可能的解決方案[是否有一個高效的內存和快速的方式來加載大型JSON文件在Python?](http://stackoverflow.com/questions/2400643/is-there-a-memory-efficient-and-快速路至負荷大的JSON文件正在蟒蛇) – miraculixx

回答

0

這是一個內存分配錯誤。 Python數據集不適合用大數據集分配內存。

您可以嘗試其他容器數據類型。作爲namedtuples(比字典亮):

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