python - मैं एक सीएसवी फ़ाइल में एक पायथन शब्दकोश कैसे लिखूं?




dictionary (4)

इस प्रश्न का उत्तर यहां दिया गया है:

मेरे पास ऐसा लगता है जो मुझे लगता है कि यह एक बहुत ही आसान काम होना चाहिए जिसे मैं हल नहीं कर सकता।

मैं एक सीएसवी फ़ाइल में एक पायथन शब्दकोश कैसे लिखूं? मैं चाहता हूं कि फ़ाइल की शीर्ष पंक्ति में कुंजीपटल कुंजी और दूसरी पंक्ति के लिए महत्वपूर्ण मानों को लिखना है।

मेरे पास आने वाला सबसे नज़दीकी निम्नलिखित है (कि मुझे किसी और की पोस्ट से मिला है):

f = open('mycsvfile.csv','wb')
w = csv.DictWriter(f,my_dict.keys())
w.writerows(my_dict)
f.close()

समस्या यह है कि उपर्युक्त कोड केवल पहली पंक्ति में कुंजी लिख रहा है और यही वह है। मुझे दूसरी पंक्ति में लिखे गए मान नहीं मिल रहे हैं।

कोई विचार?


Answers

आप DictWriter.writerows() का उपयोग कर रहे हैं जो DictWriter.writerows() की एक सूची की अपेक्षा करता है, न कि एक निर्देश। आप एक पंक्ति लिखने के लिए DictWriter.writerow() चाहते हैं।

यदि आप सीएसवी फ़ाइल के लिए हेडर चाहते हैं तो आप DictWriter.writeheader() का भी उपयोग करना चाहेंगे।

आप फ़ाइलों को खोलने के लिए कथन के with भी जांचना चाह सकते हैं। यह केवल अधिक पाइथोनिक और पठनीय नहीं है बल्कि अपवाद होने पर भी आपके लिए बंद हो जाता है।

इन परिवर्तनों के साथ उदाहरण बनाया गया:

import csv

my_dict = {"test": 1, "testing": 2}

with open('mycsvfile.csv', 'wb') as f:  # Just use 'w' mode in 3.x
    w = csv.DictWriter(f, my_dict.keys())
    w.writeheader()
    w.writerow(my_dict)

जो उत्पादन करता है:

test,testing
1,2

आपका कोड काम करने के बहुत करीब था।

डिक्टवाइटर की बजाय नियमित csv.writer का उपयोग करने का प्रयास करें। उत्तरार्द्ध मुख्य रूप से शब्दकोशों की एक सूची लिखने के लिए प्रयोग किया जाता है।

यहां कुछ कोड दिया गया है जो प्रत्येक कुंजी / मान जोड़ी को एक अलग पंक्ति पर लिखते हैं:

import csv

somedict = dict(raymond='red', rachel='blue', matthew='green')
with open('mycsvfile.csv','wb') as f:
    w = csv.writer(f)
    w.writerows(somedict.items())

यदि इसके बजाय आप सभी पंक्तियों को एक पंक्ति पर और अगले सभी मानों को चाहते हैं, तो यह भी आसान है:

with open('mycsvfile.csv','wb') as f:
    w = csv.writer(f)
    w.writerow(somedict.keys())
    w.writerow(somedict.values())

प्रो टिप : इस तरह के कोड को विकसित करते समय, लेखक को w = csv.writer(sys.stderr) सेट करें ताकि आप आसानी से देख सकें कि क्या उत्पन्न किया जा रहा है। जब तर्क पूर्ण होता है, तो w = csv.writer(f) पर वापस स्विच करें।


इस सरल कार्य के लिए सीएसवी का उपयोग क्यों करें?

keys,values=zip(*my_dict.items())
print >>f, ", ".join(keys)
print >>f, ", ".join(values)
f.close()

मैं पाइथन का दो तरीकों से उपयोग करता हूं:

1. As a proper language where I want all software engineering principles to hold in my code.
2. As a scripting language, where I want to just get something done and the code I write for this is not meant for reuse.

मेरा जवाब केवल दूसरे उद्देश्य के लिए उपयोगी है। और दर्द को इन सभी मॉड्यूल और उनके व्यक्तिगत कार्यों को याद रखने के लिए भी विचार करता है: पी


आप इसे (सुरक्षित) आज़मा सकते हैं:

try:
    # http://effbot.org/zone/python-with-statement.htm
    # 'with' is safer to open a file
    with open('whatever.txt') as fh:
        # Do something with 'fh'
except IOError as e:
    print("({})".format(e))

आउटपुट होगा:

([Errno 2] ऐसी कोई फ़ाइल या निर्देशिका नहीं: 'whatever.txt')

फिर, परिणाम के आधार पर, आपका प्रोग्राम केवल वहां से चल रहा है या यदि आप चाहें तो इसे रोकने के लिए कोड कर सकते हैं।





python dictionary