1. ホーム
  2. python

[解決済み] かなり大きなJSONファイルの読み込み [重複]。

2022-11-28 06:33:54

質問

重複の可能性があります。

大きなJSONファイルを読み込むためのメモリ効率的で高速な方法はありますか?

だから私はいくつかのかなり大きな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を扱うモジュールを使うのが一番良いようです。

編集: また、一見の価値があるのは kashifのコメント について json-streamer そして ヘンリック・ハイノ氏のコメント について bigjson .