json.dump zu einer gzip-Datei in Python 3

11

Ich versuche, ein Objekt in einem Schritt in eine gezippte JSON-Datei zu schreiben (Minimierung des Codes und möglicherweise Einsparung von Speicherplatz). Meine ursprüngliche Idee (python3) war also:

%Vor%

Dies schlägt jedoch fehl: TypeError: 'str' does not support the buffer interface , was meiner Meinung nach mit einer Zeichenfolge zu tun hat, die nicht in Bytes codiert ist. Also, was ist der richtige Weg, dies zu tun?

Aktuelle Lösung, mit der ich nicht zufrieden bin:

Das Öffnen der Datei im Textmodus löst das Problem:

%Vor%

aber ich mag keinen Textmodus. In meinen Gedanken (und vielleicht ist das falsch, aber unterstützt von dies ), wird der Textmodus zum Fixieren von Zeilenenden verwendet. Dies sollte kein Problem sein, da Json keine Zeilenenden hat, aber ich mag es nicht (möglicherweise) mit meinen Bytes zu vergelten, es (möglicherweise) ist langsamer, weil es nach Zeilenenden sucht, und (schlimmstenfalls von allen) Ich verstehe nicht, warum etwas über Zeilenenden meine Codierungsprobleme behebt?

    
Claude 18.05.2015, 08:00
quelle

1 Antwort

3

offtopic : Ich hätte etwas tiefer in die Dokumentation eintauchen sollen als ich es ursprünglich tat.

Die Python-Dokumente zeigen Folgendes:

  

Normalerweise werden Dateien im Textmodus geöffnet, dh Sie lesen und schreiben Strings von und in die Datei, die in einer bestimmten Kodierung kodiert sind (der Standardwert ist UTF-8). 'b' an den Modus angehängt öffnet die Datei im binären Modus : Jetzt werden die Daten in Form von Bytes Objekten gelesen und geschrieben. Dieser Modus sollte für alle Dateien verwendet werden, die keinen Text enthalten.

Ich stimme nicht völlig zu, dass das Ergebnis einer JSON-Kodierung eine Zeichenkette ist (ich denke, es sollte eine Menge von Bytes sein, da sie explizit definiert, dass sie utf-8-Kodierung verwendet), aber das ist mir schon aufgefallen. Also ich denke, der Textmodus ist es.

    
Claude 18.05.2015, 08:09
quelle

Tags und Links