too late amatuar programmer

[python] csvモジュールのDictWriter使用時にヘッダーを挿入したい

2011-06-29 by ebon | Lavel:

pythonのcsvモジュールのDictReader,DictWriterは便利で、よく使っている。
直感的に値操作できるので、とかく原始的である、csv利用場面に少しの安らぎをもたらす。
文字コードに悩まされる場面が多いと思うが、それはどこでも付き物かな。

そんな頼もしい輩、DictWriterを使用した時、期待を裏切られた。
単にfilednamesと書き込む辞書データを渡しただけでは、ヘッダーが挿入さないという。
かつ、方法もドキュメントではぱっと見、明示されていない。なのでメモ。

import csv

FILEDNAMES = ("a","i","u","e","o") 
HEADER     = dict([ (val,val) for val in FILEDNAMES ])
rows       = [
{"a":"あ","i":"い","u":"う","e":"え","o":"お"},
{"a":"か","i":"き","u":"く","e":"け","o":"こ"}
]

with open(tmpfile_after, mode="w") as f: 
rows.insert(0, HEADER)             
writer = csv.DictWriter(f, FILEDNAMES) 
writer.writerows(rows)

Output:
a,i,u,e,o
あ,い,う,え,お
か,き,く,け,こ

  • FILEDNAMESは順番を持つ必要があるため、タプルで作成。
  • DictWriterの引数の型は、[dict] である必要がある。
  • なので、FILEDNAMESをkey,valueともに、タプルのvalueとし、dict()を適用しておく。
  • ※DictWriterはFILEDNAMESの順序でvalueを書き込んでいく、key:value同じとしたdictにしておけばよいため。

もっと普通にできそうな気が。

0 comment:

Post a Comment