2013-09-27 75 views
5

Tôi có một tệp phân cách đường ống Tôi đang cố chuyển đổi sang json bằng python (2.7). Mã đọc tệp văn bản, chuyển đổi nó dựa trên dấu tách và sau đó chuyển đổi nó thành json.Đầu ra in Json trong python khác với đầu ra ghi vì ký tự thoát

Khi tôi chạy mã, đầu ra trong cửa sổ đầu cuối của tôi là chính xác. Tuy nhiên, khi tôi ghi vào một tập tin, dấu gạch chéo thoát được thêm vào đầu ra. Và dấu ngoặc kép không có dấu thoát được thêm vào đầu và cuối tệp đầu ra.

Dựa trên các câu trả lời khác, tôi đã thử đặt Ensure_ascii thành sai mỗi khi tôi xử lý kết xuất json. Nhưng điều đó không hiệu quả.

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) 

Output trong terminal:

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

Output trong data.json:

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

Tôi mới sử dụng Python. Tôi có thể làm gì để loại bỏ các dấu ngoặc kép (ở đầu và cuối) và các dấu gạch chéo từ tệp .json?

Trả lời

9

Bạn đang mã hóa dữ liệu của mình thành JSON hai lần. outđã được mã hóa JSON, nhưng bạn mã hóa lại bằng cách bán chuỗi JSON thành outfile.

Chỉ cần viết nó ra mà không cần mã hóa một lần nữa:

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

Đừng loại bỏ các tùy chọn ensure_ascii=False, như json.dumps() sau đó sẽ sản xuất unicode giá trị, trong đó sẽ yêu cầu bạn phải mã hóa chúng để một codec thích hợp (đọc, một của các biến thể UTF) khi bạn ghi vào tệp.

+0

Cảm ơn bạn. Điều đó có ý nghĩa hoàn hảo. Thay đổi của bạn đã khắc phục được sự cố. – lucastimmons

Các vấn đề liên quan