2016-07-31 15 views
0

最近、djangoの使用方法を学び、ユーザーが収集デッキを作成できるようにするWebサイトを作成しました。この質問はPythonだけではなく、djangoフレームワーク自体に関連しています。Pythonが大規模なjsonファイルを反復する

とにかく私はMTG用の約200セットを含む巨大なjsonファイルを解析しようとしており、各セットには複数のカードがあり、そのカードには下の画像からも分かるように複数のタイプがあります。 。これで、すべてのデータを解析し、現在のwhayイムは、このようなループのために使用される

enter image description here

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オブジェクトを繰り返し処理する方法はありますか?多くのループを通過するだけで、必要なデータに到達するか、atleastするとクラッシュすることはありませんか?

+4

はStackOverflowのへようこそ。画像を投稿しないでください。興味のある人が試してみることができるように、あなたのjsonのサンプルを投稿してください。 – e4c5

+0

これはおそらくメモリ割り当てエラーです(Pythonの反復回数に制限はありません)。可能なソリューションについては、次の記事を参照してください。[pythonで大きなjsonファイルを読み込むためのメモリ効率的で高速な方法はありますか?](http://stackoverflow.com/questions/2400643/is-there-a-memory-efficient-and-ファースト・ウェイ・ツー・ロード・ビッグ・ジョーン・ファイル・イン・パイソン) – miraculixx

答えて

0

これはメモリ割り当てエラーです。 Pythonの辞書は、大規模なデータセットではメモリをうまく割り当てることができません。

他のコンテナデータ型を試すことができます。

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) 
    ) 

または試行:namedtuples(辞書より軽い)としてhttp://bugs.python.org/issue9520

関連する問題