2013-09-27 11 views
5

Mam plik rozdzielany potokami Próbuję przekonwertować do json za pomocą Pythona (2.7). Kod odczytuje plik tekstowy, konwertuje go na podstawie ogranicznika, a następnie konwertuje go do json.Json wydrukuje dane wyjściowe w pythonie inne niż dane wyjściowe zapisu ze względu na znaki ze znakami escape

Po uruchomieniu kodu dane wyjściowe w oknie terminala są prawidłowe. Jednak gdy piszę do pliku, ukośniki ucieczki \ są dodawane do wyjścia. Do początku i końca pliku wyjściowego dodawane są znaki cudzysłowu bez znaków ucieczki.

Na podstawie innych odpowiedzi próbowałem ustawić sure_ascii na false za każdym razem, gdy zajmuję się zrzutem json. Ale to nie działa.

input.txt:

392|0|9 

Kod:

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) 

wyjścia w terminalu:

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

Wyjście w data.json:

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

Jestem nowy w Pythonie. Co mogę zrobić, aby usunąć znaki cudzysłowu (na początku i na końcu) i ukośniki z pliku .json?

Odpowiedz

9

Kodujesz swoje dane do JSON dwukrotnie pod numerem. out jest już już JSON zakodowany, ale kodujesz go ponownie, przesyłając ciąg JSON do outfile.

Wystarczy napisać go bez kodowania ponownie:

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

Czy usunąć opcję ensure_ascii=False, jak json.dumps() wtedy produkować unicode wartości, które wymagają, aby zakodować je do odpowiedniego kodeka (czytaj jeden wariantów UTF) podczas pisania do pliku.

+0

Dziękuję. To ma sens. Twoje zmiany rozwiązały problem. – lucastimmons

Powiązane problemy