सुंदर-प्रिंट JSON डेटा पायथन का उपयोग कर एक फ़ाइल के लिए


111

क्लास के लिए एक प्रोजेक्ट में ट्विटर JSON डेटा पार्स करना शामिल है। मैं डेटा प्राप्त कर रहा हूं और इसे बहुत परेशानी के बिना फ़ाइल पर सेट कर रहा हूं, लेकिन यह सब एक पंक्ति में है। यह डेटा हेरफेर के लिए ठीक है जो मैं करने की कोशिश कर रहा हूं, लेकिन फ़ाइल को पढ़ना मुश्किल है और मैं इसे बहुत अच्छी तरह से जांच नहीं कर सकता, जिससे डेटा हेरफेर भाग के लिए कोड लिखना बहुत मुश्किल हो जाता है।

क्या किसी को पता है कि पायथन के भीतर से ऐसा कैसे करना है (यानी कमांड लाइन टूल का उपयोग नहीं करना, जो मुझे काम नहीं मिल सकता है)? यहाँ मेरा कोड अब तक है:

header, output = client.request(twitterRequest, method="GET", body=None,
                            headers=None, force_auth_header=True)

# now write output to a file
twitterDataFile = open("twitterData.json", "wb")
# magic happens here to make it pretty-printed
twitterDataFile.write(output)
twitterDataFile.close()

ध्यान दें, मैं लोगों को सिंपलसन डॉक्युमेंटेशन की ओर इशारा करते हुए सराहना करता हूं और इस तरह, लेकिन जैसा कि मैंने कहा है, मैंने पहले ही उस पर ध्यान दिया है और सहायता की आवश्यकता जारी है। वास्तव में सहायक उत्तर वहाँ पाए जाने वाले उदाहरणों की तुलना में अधिक विस्तृत और व्याख्यात्मक होगा। धन्यवाद

इसके अलावा: विंडोज़ कमांड लाइन में यह कोशिश करना:

more twitterData.json | python -mjson.tool > twitterData-pretty.json

इसमें परिणाम:

Invalid control character at: line 1 column 65535 (char 65535)

मैं आपको वह डेटा दूंगा जो मैं उपयोग कर रहा हूं, लेकिन यह बहुत बड़ा है और आपने पहले ही कोड देख लिया है जिसका उपयोग मैंने फ़ाइल बनाने के लिए किया था।


1
मुझे शक है कि आप वास्तव में बाइनरी डेटा लिखना चाहते हैं ( "पश्चिम बंगाल")
हामिश

मुझे सिखाया गया था कि यह विंडोज मशीनों के लिए आवश्यक था और इस तरह अब तक मेरे सभी कामों के लिए काम किया है। यदि आप इस रूप में गलत हो सकता है तो प्रलेखन की पेशकश कर सकते हैं, मुझे यह देखकर खुशी होगी।
ज़ेलबिनियन

यह केवल तभी आवश्यक है जब आप बाइनरी फ़ाइलों, या अन्य मामलों के साथ काम कर रहे हों, जहां लाइन समाप्त होने का विशिष्ट रूप (जैसे \r\nबनाम \n) महत्वपूर्ण है। Stackoverflow.com/questions/3257869/… देखें । आपके मामले में, आप विंडोज़ फ्रेंडली लाइन एंडिंग चाहते हैं, लेकिन आपको ट्विटर एंडपॉइंट से ऐसा नहीं मिल सकता है, इसलिए आपको टेक्स्ट मोड में खोलना चाहिए।
हमीश

क्या इससे आपके सवाल का जवाब मिलता है? JSON फ़ाइल को प्रीप्रेटप्रिंट कैसे करें?
wesinat0r

जवाबों:


102

आपको वैकल्पिक तर्क का उपयोग करना चाहिए indent

header, output = client.request(twitterRequest, method="GET", body=None,
                            headers=None, force_auth_header=True)

# now write output to a file
twitterDataFile = open("twitterData.json", "w")
# magic happens here to make it pretty-printed
twitterDataFile.write(simplejson.dumps(simplejson.loads(output), indent=4, sort_keys=True))
twitterDataFile.close()

1
धन्यवाद, कि पूरी तरह से काम किया । क्या आप बता सकते हैं कि "Sort_keys" को वहां रहने की आवश्यकता क्यों है?
ज़ेलबिनियन

1
यह वहाँ होने की जरूरत नहीं है, लेकिन यह बहुत सुंदर और वर्णानुक्रम में चीजों को बनाता है। जब मैं मानव पठनीय आउटपुट चाहता हूं तो मैं इसका उपयोग करता हूं।
मैटबोन्स्की

4
खैर समझाया आप -however धन्यवाद बनने की कोशिश कर नहीं एक और $ & # लेकिन खोलने / बंद करने के लिए एक फ़ाइल के लिए प्रोत्साहित नहीं किया जाता है, संरचना के साथ आम तौर पर पसंद किया जाता है लिखने के लिए: with open("name_of_file.json", "w") as f: f.write(my_formatted_json_var) लाभ जा रहा है क्या आप वाकई फ़ाइल करीब होगा, बड़ा के टुकड़े पर कहते हैं कि कर रहे हैं ...
लॉजिकऑब्स्ट्रक्शन

withवाक्यविन्यास निश्चित रूप से अच्छा है, लेकिन मैं अपने जवाब अपने दर्शकों को देने की कोशिश करता हूं
मैट्रॉन्स्की

73

आप JSON को पार्स कर सकते हैं, फिर इसे इस तरह इंडेंट के साथ फिर से आउटपुट कर सकते हैं:

import json
mydata = json.loads(output)
print json.dumps(mydata, indent=4)

अधिक जानकारी के लिए http://docs.python.org/library/json.html देखें ।


@Zelbinian: हाँ यह सिंपलसन के लिए भी काम करता है। एक नज़र डालिए
RanRag

यह एक रिक्त फ़ाइल में परिणाम है। header, output = client.request(twitterRequest, method="GET", body=None, headers=None, force_auth_header=True) twitterDataFile = open("twitterData.json", "wb") json.dumps(json.loads(output), twitterDataFile, indent=4) twitterDataFile.close()
ज़ेलबिनियन

5
@Zelbinian - json.dumpsएक स्ट्रिंग लौटाता है। json.dumpएक फाइल पर लिखता है।
विटामिन

65
import json

with open("twitterdata.json", "w") as twitter_data_file:
    json.dump(output, twitter_data_file, indent=4, sort_keys=True)

आप की जरूरत नहीं है json.dumps()यदि आप बाद में स्ट्रिंग पार्स नहीं करना चाहते, बस का उपयोग json.dump()। यह तेज भी है।


14

आप उपयोग कर सकते हैं सुंदर प्रिंट करने के लिए अजगर के json मॉड्यूल का ।

>>> import json
>>> print json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4)
{
    "4": 5,
    "6": 7
}

तो, आपके मामले में

>>> print json.dumps(json_output, indent=4)

उस मार्ग की कोशिश की और दुर्भाग्य से वह काम नहीं करेगा जैसा आप सोचते हैं।
ज़ेलबिनियन

@Zelbinian: Exactky तुम्हारा क्या मतलब है doesn't work as well
रणराग

1
इसने एक ही पंक्ति में डेटा को
आउटपुट

एक प्रश्न के रूप में आउटपुट को शामिल करें। संपादित करें। तो, हम इसे देख सकते हैं।
2

इसका उपयोग करते हुए, सरणियों को प्रत्येक मान की कई पंक्तियों के रूप में सूचीबद्ध किया जाता है, सरणी को एक पंक्ति में रखना अच्छा होगा।
स्केप

4

यदि आपके पास पहले से मौजूद JSON फाइलें हैं, जिन्हें आप सुंदर प्रारूप में लेना चाहते हैं, तो आप इसका उपयोग कर सकते हैं:

    with open('twitterdata.json', 'r+') as f:
        data = json.load(f)
        f.seek(0)
        json.dump(data, f, indent=4)
        f.truncate()

3

यदि आप नया * .json उत्पन्न कर रहे हैं या मौजूदा josn को संशोधित कर रहे हैं तो सुंदर दृश्य json प्रारूप के लिए "इंडेंट" पैरामीटर का उपयोग करें।

import json
responseData = json.loads(output)
with open('twitterData.json','w') as twitterDataFile:    
    json.dump(responseData, twitterDataFile, indent=4)

1
import json
def writeToFile(logData, fileName, openOption="w"):
  file = open(fileName, openOption)
  file.write(json.dumps(json.loads(logData), indent=4)) 
  file.close()  

हालांकि यह कोड प्रश्न का उत्तर दे सकता है, लेकिन यह कोड इस और क्यों या कैसे का उत्तर देता है, इस संबंध में अतिरिक्त संदर्भ प्रदान करता है।
टोन

-2

आप एक फ़ाइल को अजगर पर पुनर्निर्देशित कर सकते हैं और टूल का उपयोग करके खोल सकते हैं और इसे अधिक उपयोग करने के लिए पढ़ सकते हैं।

नमूना कोड होगा,

cat filename.json | python -m json.tool | more
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.