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