首頁 >後端開發 >Python教學 >如何在不耗盡記憶體的情況下處理海量 JSON 檔案?

如何在不耗盡記憶體的情況下處理海量 JSON 檔案?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-30 07:26:27939瀏覽

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 處理作為串流而不是完整的區塊。這涉及僅讀取文件的部分內容、處理它們,並迭代地繼續,直到處理整個文件。

強烈建議的一個選項是 ijson,它是一個為串流 JSON 資料量身定制的模組。在它的幫助下,您可以將 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>

替代解決方案

另外兩個值得注意的替代方案:

  • json-streamer:另一個具有可自訂選項的串流JSON 解析器。
  • bigjson: 也是用來處理 JSON 檔案的專用套件記憶體大。它提供了一個基於遊標的介面來導航資料。

透過利用這些技術,您甚至可以有效地處理最龐大的 JSON 文件,而不會遇到記憶體耗盡的情況。

以上是如何在不耗盡記憶體的情況下處理海量 JSON 檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn