Öffnen Eine große JSON-Datei in Python

8

Ich habe eine 1,7 GB JSON-Datei, wenn ich versuche, mit json.load () zu öffnen, dann gibt es Speicherfehler, Wie könnte die JSON-Datei in Python lesen?

Meine JSON-Datei ist ein großes Array von Objekten, die bestimmte Schlüssel enthalten.

EDIT: Nun, wenn es nur ein großes Array von Objekten ist und die Struktur von Objekten vorher bekannt ist, dann brauchen wir keine Werkzeuge zu verwenden, die wir Zeile für Zeile lesen könnten. Eine Zeile enthält nur ein Element des Arrays. Mir ist aufgefallen, dass json-Dateien so gespeichert sind, für mich funktionierte es nur so.

%Vor%     
Hirak Sarkar 23.05.2012, 07:49
quelle

4 Antworten

10

Sie möchten einen inkrementellen JSON-Parser wie yajl und eine seiner Python-Bindungen. Ein inkrementeller Parser liest so wenig wie möglich von der Eingabe und ruft einen Callback auf, wenn etwas Bedeutungsvolles dekodiert wird. Zum Beispiel, um nur Zahlen aus einer großen JSON-Datei zu ziehen:

%Vor%

Weitere Informationen finden Sie Ссылка .

    
georg 23.05.2012 07:53
quelle
1

Ich habe einen weiteren Python-Wrapper in der Bibliothek yajl gefunden, der ijson ist.

Es funktioniert besser für mich als yajl-py aus folgenden Gründen:

  • yajl-py hat die yajl-Bibliothek auf meinem System nicht gefunden, ich musste den Code hacken, damit er funktioniert
  • ijson code ist kompakter und einfacher zu benutzen
  • ijson kann mit yajl v1 und yajl v2 arbeiten und hat sogar pure python yajl replacement
  • ijson hat einen sehr netten ObjectBuilder, mit dem Sie nicht nur Ereignisse, sondern auch aussagekräftige Unterobjekte aus dem geparsten Stream extrahieren können, und zwar auf der Ebene, die Sie angeben
Yaroslav Stavnichiy 17.04.2015 22:25
quelle
1

Hier ist ein weiterer inkrementeller JSON-Parser.

Ссылка

Ich habe es nicht benutzt.

    
Croad Langshan 12.08.2015 21:16
quelle
0

Ich fand yajl (daher ijson) viel langsamer als das Modul json , wenn von einer lokalen Festplatte auf eine große Datendatei zugegriffen wurde. Hier ist ein Modul, das behauptet, besser zu sein als yajl / ijson (immer noch langsamer als json ), wenn es mit Cython verwendet wird:

Ссылка

Der Autor weist darauf hin, dass die Leistung möglicherweise besser ist als json , wenn die Datei über das Netzwerk empfangen wird, da ein inkrementeller Parser früher mit der Analyse beginnen kann.

    
Croad Langshan 12.08.2015 21:15
quelle

Tags und Links