2013-09-27 7 views
5

मेरे पास एक पाइप सीमित फ़ाइल है जिसे मैं पायथन (2.7) का उपयोग करके जेसन में परिवर्तित करने की कोशिश कर रहा हूं। कोड टेक्स्ट फ़ाइल को पढ़ता है, इसे डेलीमीटर पर आधारित करता है और फिर इसे जेसन में परिवर्तित करता है।पाइथन में जेसन प्रिंट आउटपुट बचने वाले वर्णों के कारण लिखने के आउटपुट से अलग

जब मैं कोड चलाता हूं, तो मेरी टर्मिनल विंडो में आउटपुट सही होता है। हालांकि, जब मैं एक फ़ाइल में लिखता हूं तो बचने के लिए \ N आउटपुट में जोड़ा जा रहा है। और आउटपुट फ़ाइल की शुरुआत और अंत में कोई भागने वाले उद्धरण चिह्न जोड़े जा रहे हैं।

अन्य उत्तरों के आधार पर मैंने जेसन डंप से निपटने के लिए हर बार false_ascii को गलत करने की कोशिश की है। लेकिन यह काम नहीं कर रहा है।

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) 

आउटपुट:

"[{\"A\": \"392\", \"C\": \"9\", \"B\": \"0\"}]" 
: data.json में

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

आउटपुट

मैं पाइथन के लिए नया हूँ। उद्धरण चिह्न (शुरुआत और अंत में) और .json फ़ाइल से स्लेश को हटाने के लिए मैं क्या कर सकता हूं?

उत्तर

9

आप अपने डेटा को JSON पर दो बार पर एन्कोड कर रहे हैं। outपहले से ही JSON एन्कोड किया गया है, लेकिन आप JSON स्ट्रिंग को outfile पर डंप करके फिर से एन्कोड करते हैं।

बस इसे फिर से एन्कोडिंग के बिना बाहर लिखें:

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

ensure_ascii=False विकल्प हटाते हैं तो यूनिकोड मूल्यों, जो आप उन्हें एक उपयुक्त कोडेक के एन्कोड करने के लिए की आवश्यकता होगी का उत्पादन करेगा json.dumps() के रूप में, (पढ़ें, एक यूटीएफ वेरिएंट के रूप में) जैसा कि आप फ़ाइल में लिखते हैं।

+0

धन्यवाद। यह सही समझ में आता है। आपके परिवर्तनों ने समस्या को ठीक कर दिया है। – lucastimmons

संबंधित मुद्दे