在不造成記憶體過載的情況下處理大量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 文件,而不會遇到記憶體耗盡的情況。
以上是如何在不耗盡記憶體的情況下處理海量 JSON 檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!