Comment lire un fichier JSON délimité par des lignes à partir d'un fichier volumineux (ligne par ligne)
Je suis en train de charger un fichier volumineux (2 go de taille) rempli avec chaînes JSON, délimité par des sauts de ligne. Ex:
{
"key11": value11,
"key12": value12,
}
{
"key21": value21,
"key22": value22,
}
…
La façon dont je suis l'importation de maintenant c'est:
content = open(file_path, "r").read()
j_content = json.loads("[" + content.replace("}\n{", "},\n{") + "]")
Ce qui semble être un hack (ajout de virgules entre chaque chaîne JSON et aussi un début et un fin crochet pour en faire une liste).
Est-il un meilleur moyen de spécifier le JSON délimiteur (saut de ligne \n
au lieu d'une virgule ,
)?
Aussi, Python
ne semblent pas correctement allouer de la mémoire pour un objet construit à partir de 2 go de données, il est un moyen de construire chaque JSON
objet que je suis en train de lire le fichier ligne par ligne? Merci!
source d'informationauteur Cat
Vous devez vous connecter pour publier un commentaire.
Viens de lire chaque ligne et de construire un objet json en ce moment:
De cette façon, vous pouvez charger le bon de compléter objet json (il n'y a pas
\n
dans une valeur json quelque part ou dans le milieu de votre objet json) et vous éviter les problème de mémoire que chaque objet est créé lorsque cela est nécessaire.Il y a aussi cette réponse.:
https://stackoverflow.com/a/7795029/671543
Cela fonctionne pour le format de fichier spécifique que vous avez donné. Si vos changements de format, alors vous aurez besoin de changer la façon dont les lignes sont analysées.
Viens de lire ligne par ligne, et de construire le JSON de blocs que vous allez:
Si vous êtes intéressé dans l'analyse d'un très grand fichier JSON sans tout enregistrer dans la mémoire, vous devez regarder à l'aide de la object_hook ou object_pairs_hook méthodes de rappel dans le json.chargement de l'API.