私はファイルセットにアクセスできます(それぞれ約80-800mb)。残念ながら、すべてのファイルには1行しかありません。この行には、厳密に1つのJSONオブジェクト(リストのリスト)が含まれています。小さなJSONオブジェクトにロードして解析するには、どうすればよいでしょうか?大きなJSONリストをPythonで読み込むにはどうすればよいですか?
答えて
すでに同様の投稿hereがあります。ここでは、彼らが提案された解決策は、次のとおりです。
import json
with open('file.json') as infile:
o = json.load(infile)
chunkSize = 1000
for i in xrange(0, len(o), chunkSize):
with open('file_' + str(i//chunkSize) + '.json', 'w') as outfile:
json.dump(o[i:i+chunkSize], outfile)
が殺されました。これはPythonシェルが言ったことです – ashish
あなたがメモリに全体のリストを読み込む避けるためにしようとしている場合は、あなたが最初のテキストとしてファイルを処理できます。
は、オープンを追跡するために、スタックを使用し、括弧/引用符の閉じ方。オープナーのいずれか、または現在の近くの文字列をスキャンします。テキストをスキャンするときは、テキストをより近くに見るだけです。開幕戦を読んだときに1つを押すと、開幕戦を読んだときにポップする。 、{
>]
- - >}
と"
- >"
JSONのためのフルセットは[
です。あなたは\"
を除外する必要があります。 ]
が発生し、スタックが唯一一致[
をポップしたあとに1つのアイテム(トップレベルを「[」)持っている時はいつでもあなたが次にhttp://www.json.org/
でスペックを確認することができ、その後、あなたはそれが新しい行を開始する時間です知っています。
最後に、最初のと最後の]
が出力に表示されないようにする必要があります。
これにより、リストの各項目ごとに別々のJSONオブジェクトが作成され、それぞれがファイルの別々の行に表示されます。
Python JSONライブラリを調べると、JSONも解析する関数があるはずです。パブリックインターフェイスの一部ではないものの、それらを活用することができます。
もちろん、JSONライブラリを使用して文字列を読み込んだ後、もう1つの答えに応じてアイテム(または複数のアイテム)をダンプすることで、同じ結果を達成できます。
完全に良いjsonモジュールが標準ライブラリに付属しているときに、この低レベルのスキャン方法が必要なのはなぜですか? @リンカの答えを参照してください – jdi
私は彼が実際にメモリに格納されているjsonオブジェクトを持つメモリオーバーヘッドを持っていないと思う。 jsonライブラリの公開インタフェースはそれを許しません。私は彼がそのライブラリをハックし、ヘルパー関数のいくつかを使用することができますが、私はそれらを見ていませんが、言及しています。 – chees
はい、他の回答に示唆されているように、メモリの懸念は実際には一度のバッチ処理では問題になりません。小さなオブジェクトにバッチ処理するだけの生産的なソリューションである必要はありません。 – jdi
モジュールpandas 0.21.0
は、read_json
の一部としてchunkksizeをサポートするようになりました。
import pandas as pd
chunks = pd.read_json(file, lines=True, chunksize = 100)
for c in chunks:
print(c)
- 1. ランダムなレベルを読み込むにはどうすればよいですか?
- 2. JavaScriptを.jsonファイルから読み込むにはどうすればよいですか?
- 3. Pythonはリストにファイルを読み込む -
- 4. パイプにさらに値を書き込んで読み込むにはどうすればいいですか?
- 5. phpのファイルを読み込むにはどうすればいいですか?
- 6. 「プロセス名」+アドレスのようなポインタから読み込むにはどうすればよいですか?
- 7. このPHP配列をPythonリストに書き込むにはどうすればよいですか?
- 8. XDocumentに読み込むときにエンティティを解決するにはどうすればよいですか?
- 9. .csvファイルをPythonリストに読み込む
- 10. ウェブサイトの読み込みをよりきれいにするにはどうすればよいですか?
- 11. プロパティファイルを読み込むようにLog4jを設定するにはどうすればよいですか?
- 12. イメージ1、イメージ2、イメージ3などを読み込むにはどうすればよいですか
- 13. ページの読み込みに素晴らしいフォントなどのWebフォントを読み込むにはどうすればよいですか?
- 14. MATLABで大きなファイル(〜150MB)を読み込むにはどうしたらいいですか?
- 15. 異なる条件で同じASPグリッドビューを読み込むにはどうすればよいですか?
- 16. Process getOutputStreamに大きな出力を書き込むにはどうすればよいですか?
- 17. 大きな画像を読み込む
- 18. テキストと数値のデータを含むファイルを読み込むにはどうすればよいですか?
- 19. 大きな画像をすばやく読み込む
- 20. Objective-CでPHP配列を読み込むにはどうすればよいですか?私はPHPで
- 21. JavaでZipファイルからメモリにファイルを読み込むにはどうすればよいですか?
- 22. Windows XPおよびWindows 7でシステムオーディオ出力を読み込むにはどうすればよいですか?
- 23. メインコンテンツ領域にコンテンツを読み込むドロップダウンを行うにはどうすればよいですか?
- 24. ローカルテキストファイルを読むにはどうすればよいですか?
- 25. Scala Streamクラスを使用して大きなCSVファイルを読むにはどうすればよいですか?
- 26. PythonでJavaでネイティブに読み取ることができるfloat値を書き込むにはどうすればよいですか?
- 27. SharePointで複数の値を持つLookUpフィールドを読み込むにはどうすればよいですか?
- 28. RTP iPhoneカメラ - 書き込み中にAVAssetWriterファイルを読むにはどうすればいいですか?
- 29. 新しいコンテンツを剣道のウィンドウに読み込むにはどうすればよいですか?
- 30. Pythonでファイル全体を読み取らずに、ファイルの4つの特定の行を読み込むにはどうすればよいですか?
私はあなたが少なくとも[標準jsonモジュール](http://docs.python.org/library/json.html)と考えています。 – C2H5OH
[95MBのJSONアレイを分割して小さなチャンクに分割するのは可能でしょうか?](http://stackoverflow.com/questions/7052947/split-95mb-json-array-into-smaller-chunks) –
@ C2H5OH - はい、私は全体をメモリにロードしないようにしています。 –