Duplicate possible:
Existe-t-il un moyen rapide et efficace de charger de gros fichiers JSON en python?
J'ai donc quelques fichiers encodés en json assez volumineux. Le plus petit fait 300 Mo, mais de loin le plus petit. Les autres sont de plusieurs Go, allant d’environ 2 Go à 10 Go +.
Il me semble donc manquer de mémoire lorsque j'essaie de charger le fichier avec Python. Je suis en train de faire quelques tests pour voir approximativement combien de temps cela va prendre pour voir où aller à partir de maintenant. Voici le code que j'utilise pour tester:
from datetime import datetime
import json
print datetime.now()
f = open('file.json', 'r')
json.load(f)
f.close()
print datetime.now()
Sans surprise, Python me donne une MemoryError. Il semble que json.load () appelle json.loads (f.read ()), qui tente de vider le fichier entier en mémoire en premier , ce qui ne va clairement pas au travail.
Est-ce que je peux résoudre ce problème proprement?
Je sais que c'est vieux, mais je ne pense pas que ce soit un doublon. Bien que la réponse soit la même, la question est différente. Dans le "duplicata", la question est de savoir comment lire efficacement des fichiers volumineux, alors que cette question traite des fichiers qui ne tiendront même pas dans la mémoire. L'efficacité n'est pas requise.
Le problème ici est que JSON, en tant que format, est généralement analysé dans son intégralité, puis traité en mémoire, ce qui est clairement problématique pour une aussi grande quantité de données.
Pour résoudre ce problème, la solution consiste à utiliser les données sous forme de flux - en lisant une partie du fichier, en l’utilisant puis en le répétant.
La meilleure option semble utiliser quelque chose comme ijson - un module qui fonctionnera avec JSON en tant que flux plutôt qu'en tant que fichier bloc.
Edit: Vaut également le coup d'oeil - commentaire de kashif à propos de json-streamer
et commentaire de Henrik Heino à propos de bigjson
.