ホームページ >バックエンド開発 >Python チュートリアル >メモリ不足にならずに大量の JSON ファイルを処理するにはどうすればよいですか?

メモリ不足にならずに大量の JSON ファイルを処理するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-30 07:26:27938ブラウズ

How to Process Massive JSON Files Without Running Out of Memory?

メモリ過負荷なしで大量の JSON ファイルを処理する

大量の JSON ファイルをメモリにロードすると、メモリが枯渇することがよくあります。次のシナリオを考えてみましょう:

<code class="python">from datetime import datetime
import json

print(datetime.now())

f = open('file.json', 'r')
json.load(f)
f.close()

print(datetime.now())</code>

このコードは、JSON ファイルの内容全体をロードしようとします。これにより、MemoryError が発生する可能性があります。これは、json.load() が json.loads(f.read()) に委任し、最初にファイル全体をメモリに読み取るためです。

解決策: ストリーミングの力を活用する

メモリの制約を回避するには、完全なブロックではなくストリームとして JSON 処理を行うことを検討してください。これには、ファイルの一部のみを読み取り、それらを処理し、ファイル全体が処理されるまで繰り返し続行することが含まれます。

強く推奨されるオプションの 1 つは、JSON データのストリーミング用に調整されたモジュールである ijson です。これを利用すると、JSON を静的ファイルではなくストリームとして操作でき、メモリ制限を効果的に回避できます。

<code class="python"># With ijson
import ijson

with open('file.json', 'r') as f:
    for event, value in ijson.parse(f):
        # Process the event and value</code>

代替ソリューション

その他の 2 つの注目すべき代替案:

  • json-streamer: カスタマイズ可能なオプションを備えた別のストリーミング JSON パーサー。
  • bigjson: JSON ファイルを処理するための特殊なパッケージもメモリとしては大きい。データをナビゲートするためのカーソルベースのインターフェイスが提供されます。

これらの手法を利用すると、メモリを枯渇させることなく、最も巨大な JSON ファイルでも効率的に処理できます。

以上がメモリ不足にならずに大量の JSON ファイルを処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。