too late amatuar programmer

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

2011-06-29 by ebon | Lavel:

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

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

  1. import csv  
  2.   
  3. FILEDNAMES = ("a","i","u","e","o")   
  4. HEADER     = dict([ (val,val) for val in FILEDNAMES ])  
  5. rows       = [  
  6. {"a":"あ","i":"い","u":"う","e":"え","o":"お"},  
  7. {"a":"か","i":"き","u":"く","e":"け","o":"こ"}  
  8. ]  
  9.   
  10. with open(tmpfile_after, mode="w") as f:   
  11. rows.insert(0, HEADER)               
  12. writer = csv.DictWriter(f, FILEDNAMES)   
  13. 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