Maison >développement back-end >Tutoriel Python >Comment traiter des fichiers JSON massifs sans manquer de mémoire ?

Comment traiter des fichiers JSON massifs sans manquer de mémoire ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-30 07:26:27922parcourir

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

Gérer des fichiers JSON massifs sans surcharge de mémoire

Le chargement de fichiers JSON volumineux en mémoire peut souvent entraîner un épuisement de la mémoire. Considérez le scénario suivant :

<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>

Ce code tente de charger l'intégralité du contenu d'un fichier JSON, ce qui peut conduire à une MemoryError. En effet, json.load() délègue à json.loads(f.read()), qui lit d'abord l'intégralité du fichier en mémoire.

Solution : adoptez la puissance du streaming

Pour éviter les contraintes de mémoire, envisagez d'aborder le traitement JSON comme un flux plutôt que comme un bloc complet. Cela implique de lire uniquement des parties du fichier, de les traiter et de continuer de manière itérative jusqu'à ce que l'intégralité du fichier soit traitée.

Une option fortement recommandée est ijson, un module conçu pour diffuser des données JSON. Avec son aide, vous pouvez travailler avec JSON sous forme de flux plutôt que de fichier statique, contournant ainsi efficacement les limitations de mémoire.

<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>

Solutions alternatives

Deux autres alternatives remarquables :

  • json-streamer : Un autre analyseur JSON de streaming avec des options personnalisables.
  • bigjson : Un package spécialisé pour gérer également les fichiers JSON grand pour la mémoire. Il fournit une interface basée sur un curseur pour parcourir les données.

En utilisant ces techniques, vous pouvez traiter efficacement même les fichiers JSON les plus colossaux sans rencontrer d'épuisement de la mémoire.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn