1

次のような大きな JSON ファイルがあります。

{"details":{

    "1000":[
        ["10","Thursday","1","19.89"],

        ["12","Monday","3","20.90"],
        ...
    ]
    "1001":[
        ["30","Sunday","11","80.22"],

        ["88","Wednesday","22","8.29"],
        ...
    ]

    }
}

ここで、以下のコードを使用してijson (インタラクティブ Json) を使用して、「 details」値から「1000」、「1001」などの変数に存在するリストを抽出しています。

import ijson as ijson
filename='Clean_Details.json'

with open(filename,'r') as f:
    objects=ijson.items(f,'details.1001.item')
    for row in objects:
        print(row)
    print("Done")

しかし、問題は、上記のコードでfor ループが終了していないことです。1001 で最終リストを出力した後、実行を続けます。

上記のコードの Generator( objects ) がStopIterationに遭遇していないと推測していますが、理由はわかりません。

誰でも助けてもらえますか?少し助けていただければ幸いです。

4

1 に答える 1

2

JSONファイルのサイズ800MBを超え、約100万件を超えるレコードがあるため、解析が完了するまでに時間がかかるため、わかりました。

ループは最終的に終了しますが、完了するまでに時間がかかります。通常のスペックのPCでは、間違いなく時間がかかります。

また使用:

import ijson as ijson

速度を向上させるために、ほとんどの解析が Python バックエンド コードを使用して行われるため、非常に大きなファイルではかなり遅くなります。

使ったほうがずっといい

import ijson.backends.yajl2_cffi as ijson

上記のコードの実行時間を改善するcffiを使用する C 言語のバックエンドがあるためです。

于 2016-08-19T10:33:58.053 に答える