Beberapa pilihan:
(1) Dengan susah payah membuat pemetaan identitas (yaitu tidak melakukan apa-apa) dari nama bidang Anda sehingga csv.DictWriter dapat mengubahnya kembali ke daftar dan meneruskannya ke instance csv.writer.
(2) Dokumentasi menyebutkan " writer
contoh yang mendasari " ... jadi gunakan saja (contoh di akhir).
dw.writer.writerow(dw.fieldnames)
(3) Hindari overhead csv.Dictwriter dan lakukan sendiri dengan csv.writer
Menulis data:
w.writerow([d[k] for k in fieldnames])
atau
w.writerow([d.get(k, restval) for k in fieldnames])
Alih-alih extrasaction
"fungsionalitas", saya lebih suka membuat kode sendiri; dengan cara itu Anda dapat melaporkan SEMUA "ekstra" dengan kunci dan nilai, bukan hanya kunci ekstra pertama. Apa gangguan nyata dengan DictWriter adalah bahwa jika Anda telah memverifikasi kunci sendiri saat setiap dict sedang dibuat, Anda harus ingat untuk menggunakan extrasaction = 'ignore' jika tidak, itu akan menjadi SLOWLY (nama bidang adalah daftar) ulangi pemeriksaan:
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) )
.