Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana Memproses Fail JSON Bersaiz Tanpa Ralat Memori dalam Python?

Bagaimana Memproses Fail JSON Bersaiz Tanpa Ralat Memori dalam Python?

DDD
DDDasal
2024-10-31 02:53:02620semak imbas

How to Process Sizeable JSON Files Without Memory Errors in Python?

Membaca Fail JSON Bersaiz

Memuatkan fail JSON yang besar ke dalam Python boleh menimbulkan cabaran memori disebabkan oleh kelakuan lalai penyahkod JSON. Penyahkod ini biasanya memuatkan keseluruhan fail ke dalam memori, mengakibatkan MemoryErrors untuk fail besar-besaran.

Kunci untuk menangani isu ini terletak pada menggunakan pendekatan penstriman dan bukannya memuatkan keseluruhan fail sekali gus. Ini melibatkan pembacaan dan pemprosesan data dalam bahagian yang lebih kecil.

Penyelesaian: Penstriman JSON

Satu penyelesaian yang berkesan ialah melaksanakan pendekatan penstriman dengan modul ijson. Ijson menganggap JSON sebagai strim, membenarkan pemprosesan berulang data tanpa menyimpan keseluruhan fail dalam memori.

Contoh Kod

<code class="python">from ijson import items

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

Dalam contoh ini, modul ijson berulang ke atas data JSON, menyediakan peristiwa dan nilai untuk diproses. Ini mengelakkan memuatkan keseluruhan fail ke dalam memori, menyelesaikan ralat memori awal.

Penyelesaian Alternatif

Penyelesaian ketara lain termasuk:

  • json-streamer: Perpustakaan yang direka secara eksplisit untuk menstrim JSON yang besar fail.
  • bigjson: Alat yang menukar fail JSON kepada format binari untuk pemprosesan yang lebih cekap.

Dengan memanfaatkan teknik penstriman, anda boleh memuatkan dan mengendalikan fail JSON yang besar tanpa menghadapi kekangan memori.

Atas ialah kandungan terperinci Bagaimana Memproses Fail JSON Bersaiz Tanpa Ralat Memori dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn