2013-09-27 4 views
5

Ich habe eine Pipe-getrennte Datei Ich versuche, mit Python (2.7) in Json zu konvertieren. Der Code liest die Textdatei, konvertiert sie basierend auf dem Trennzeichen und konvertiert sie anschließend in json.Json Druckausgabe in Python anders als Schreibausgabe wegen Escapezeichen

Wenn ich den Code ausführen, ist die Ausgabe in meinem Terminalfenster korrekt. Wenn ich jedoch in eine Datei schreibe, werden die Escape-Schrägstriche \ zur Ausgabe hinzugefügt. An Anfang und Ende der Ausgabedatei werden Anführungszeichen ohne Escapes hinzugefügt.

Basierend auf anderen Antworten habe ich versucht, bei jedem Umgang mit dem JSON-Dump die Variable use_ascii auf false zu setzen. Aber das funktioniert nicht.

input.txt:

392|0|9 

Code:

import csv 
import json 

f = open('input.txt', 'rU') 
reader = csv.DictReader(f, fieldnames = ("A", "B", "C"), delimiter='|') 
out = json.dumps([ row for row in reader ], ensure_ascii=False) 
print out 
with open('data.json', 'w') as outfile: 
    json.dump(out, outfile, ensure_ascii=False) 

Ausgabe im Terminal:

[{"A": "392", "C": "9", "B": "0"}] 

Ausgabe in data.json:

"[{\"A\": \"392\", \"C\": \"9\", \"B\": \"0\"}]" 

Ich bin neu in Python. Was kann ich tun, um die Anführungszeichen (am Anfang und Ende) und die Schrägstriche aus der .json-Datei zu entfernen?

Antwort

9

Sie codieren Ihre Daten zu JSON zweimal. out ist bereits JSON codiert, aber Sie codieren es erneut, indem Sie die JSON-Zeichenfolge an outfile ablegen.

Sie es einfach wieder schreiben, ohne Codieren aus:

with open('data.json', 'w') as outfile: 
    outfile.write(out) 

Sie die ensure_ascii=False Option entfernen, wie json.dumps() dann Unicode Werte produzieren, die Sie benötigen würde, sie zu einem geeigneten Codec zu kodieren (lesen, ein der UTF-Varianten), während Sie in die Datei schreiben.

+0

Vielen Dank. Das macht vollkommen Sinn. Ihre Änderungen haben das Problem behoben. – lucastimmons