2013-09-27 7 views
5

パイプで区切られたファイルがあります。私はpython(2.7)を使用してjsonに変換しようとしています。 コードはテキストファイルを読み取り、デリミタに基づいて変換し、jsonに変換します。Jsonプリント出力がエスケープ文字のために書込み出力と異なっています

私はコードを実行すると、私のターミナルウィンドウの出力が正しいです。しかし、ファイルに書き込むとき、エスケープ・スラッシュ\が出力に追加されています。また、出力ファイルの先頭と末尾にエスケープのない引用符が追加されています。

他の回答に基づいて、私はjsonダンプを処理するたびに、ensure_asciiをfalseに設定しようとしました。しかし、それは動作していません。

INPUT.TXT:

392|0|9 

コード:

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) 

ターミナルでの出力:data.jsonで

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

出力:

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

私はPythonが初めてです。引用符(開始点と終了点)と.jsonファイルのスラッシュを削除するにはどうすればよいですか?

答えて

9

データをJSON に2回にエンコードしています。 outです。すでに JSONがエンコードされていますが、JSON文字列をoutfileにダンプすることで再度エンコードします。

がもう一度エンコードせずにそれを書き出し:

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

は、その後、適切なコーデックにそれらをエンコードするためにあなたを必要とするユニコード値を生成しますjson.dumps()として、ensure_ascii=Falseオプションを削除してください(読み、1 UTFバリアントのうちの1つ)をファイルに書き込むときに使用します。

+0

ありがとうございます。それは完璧な意味合いがあります。あなたの変更によって問題は解決されました。 – lucastimmons