अजगर में 3 चीजें थोड़ी अलग, लेकिन सरल और कम त्रुटि वाली होती हैं। CSV को यह बताना अच्छा है कि आपकी फ़ाइल utf8एन्कोडिंग के साथ खोली जानी चाहिए , क्योंकि यह उस डेटा को दूसरों के लिए अधिक पोर्टेबल बनाती है (यह मानते हुए कि आप अधिक प्रतिबंधात्मक एन्कोडिंग का उपयोग नहीं कर रहे हैं, जैसे latin1)
import csv
toCSV = [{'name':'bob','age':25,'weight':200},
{'name':'jim','age':31,'weight':180}]
with open('people.csv', 'w', encoding='utf8', newline='') as output_file:
fc = csv.DictWriter(output_file,
fieldnames=toCSV[0].keys(),
)
fc.writeheader()
fc.writerows(toCSV)
- ध्यान दें कि
csvपायथन 3 में newline=''पैरामीटर की आवश्यकता होती है , अन्यथा एक्सेल / ओपेनकेलेक में खुलने पर आपको अपने सीएसवी में खाली लाइनें मिलती हैं।
वैकल्पिक रूप से: मैं pandasमॉड्यूल में सीएसवी हैंडलर का उपयोग करना पसंद करता हूं । मुझे लगता है कि यह एन्कोडिंग मुद्दों के अधिक सहिष्णु है, और पांडा स्वचालित रूप से सीएसवी में स्ट्रिंग नंबर को फ़ाइल को लोड करते समय सही प्रकार (इंट, फ्लोट, आदि) में बदल देंगे।
import pandas
dataframe = pandas.read_csv(filepath)
list_of_dictionaries = dataframe.to_dict('records')
dataframe.to_csv(filepath)
ध्यान दें:
- यदि आप इसे पथ देते हैं तो पांडा आपके लिए फ़ाइल खोलने का ध्यान
utf8रखेगा, और python3 में डिफ़ॉल्ट होगा , और हेडर का भी पता लगाएगा।
- डेटाफ़्रेम वही संरचना नहीं है जो CSV आपको देता है, इसलिए आप एक ही चीज़ को प्राप्त करने के लिए लोडिंग पर एक पंक्ति जोड़ते हैं:
dataframe.to_dict('records')
- पांडा आपके csv फ़ाइल में कॉलम के क्रम को नियंत्रित करना बहुत आसान बनाता है। डिफ़ॉल्ट रूप से, वे वर्णानुक्रम में हैं, लेकिन आप स्तंभ क्रम निर्दिष्ट कर सकते हैं। वेनिला
csvमॉड्यूल के साथ , आपको इसे खिलाने की आवश्यकता है OrderedDictया वे एक यादृच्छिक क्रम में दिखाई देंगे (यदि अजगर <3.5 में काम कर रहा है)। देखें: अधिक के लिए पायथन पंडों डेटाफ्रेम में कॉलम ऑर्डर को संरक्षित करना।