कुछ विकल्प:
(1) अपने फील्डनामों से श्रमपूर्वक एक पहचान-मानचित्रण (यानी कुछ भी न करें) करें ताकि csv.DictWriter इसे वापस एक सूची में बदल सके और इसे एक csv.writer उदाहरण में पास कर सके।
(2) दस्तावेज़ीकरण में "अंतर्निहित writer
उदाहरण" का उल्लेख किया गया है ... इसलिए बस इसका उपयोग करें (उदाहरण के अंत में)।
dw.writer.writerow(dw.fieldnames)
(3) csv.Dictwriter ओवरहेड से बचें और इसे csv.writer के साथ स्वयं करें
लेखन डेटा:
w.writerow([d[k] for k in fieldnames])
या
w.writerow([d.get(k, restval) for k in fieldnames])
extrasaction
"कार्यक्षमता" के बजाय , मैं इसे स्वयं कोड करना पसंद करूंगा; इस तरह आप कुंजियों और मूल्यों के साथ सभी "अतिरिक्त" रिपोर्ट कर सकते हैं, न कि केवल पहली अतिरिक्त कुंजी। DictWriter के साथ एक वास्तविक उपद्रव यह है कि यदि आपने कुंजियों को स्वयं सत्यापित कर लिया है कि प्रत्येक ताना बनाया जा रहा है, तो आपको एक्सट्रैक्शन = 'इग्नोर' का उपयोग करने के लिए याद रखने की आवश्यकता है अन्यथा यह धीरे-धीरे जा रहा है (फ़ील्डनाम एक सूची है: चेक को दोहराएं:
wrong_fields = [k for k in rowdict if k not in self.fieldnames]
============
>>> f = open('csvtest.csv', 'wb')
>>> import csv
>>> fns = 'foo bar zot'.split()
>>> dw = csv.DictWriter(f, fns, restval='Huh?')
# dw.writefieldnames(fns) -- no such animal
>>> dw.writerow(fns) # no such luck, it can't imagine what to do with a list
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\python26\lib\csv.py", line 144, in writerow
return self.writer.writerow(self._dict_to_list(rowdict))
File "C:\python26\lib\csv.py", line 141, in _dict_to_list
return [rowdict.get(key, self.restval) for key in self.fieldnames]
AttributeError: 'list' object has no attribute 'get'
>>> dir(dw)
['__doc__', '__init__', '__module__', '_dict_to_list', 'extrasaction', 'fieldnam
es', 'restval', 'writer', 'writerow', 'writerows']
# eureka
>>> dw.writer.writerow(dw.fieldnames)
>>> dw.writerow({'foo':'oof'})
>>> f.close()
>>> open('csvtest.csv', 'rb').read()
'foo,bar,zot\r\noof,Huh?,Huh?\r\n'
>>>
dw.writerow( dict((f,f) for f in dr.fieldnames) )
:।