Python 密技 - CSVDictWriter 搭配 defaultdict 省時又省力

Posted on  Sep 2, 2016  in  Python 程式設計 - 中階  by  Amo Chen  ‐ 1 min read

Python 的 CSVDictWriter 是很方便的模組,可以直接使用 dict 資料寫入到 CSV 檔案,其用法大致如下:

import csv

with open('my.csv', 'w') as csvf:
    writer = csv.DictWriter(csvf, fieldnames=[
        'field_1',
        'field_2',
        'field_3'
    ])

    writer.writeheader()
    writer.writerow({'field_1': '', 'field_2': 'b', 'field_3': ''})
    writer.writerow({'field_1': '', 'field_2': 'b', 'field_3': ''})

CSVDictWriter 雖然方便,但是如果 row 裡有缺少任何一個 field 都會停止執行,所以遇到欄位很多,而且又不見得每一個欄位都有值的情況就糟糕了,真的要手動打完所有欄位的值嗎?

其實只要搭配 defaultdict 就解決這個問題了。

例如:

import csv
from collections import defaultdict

with open('my.csv', 'w') as csvf:
    writer = csv.DictWriter(csvf, fieldnames=[
        'field_1',
        'field_2',
        'field_3'
    ])

    writer.writeheader()
    for i in range(0, 10):
        row = defaultdict(str) # 建立所有 key 預設值為空字串的 dict
        row['filed_2'] = 'b'
        writer.writerow(row)

原理就是利用 defaultdict 建立一個有預設值的 dict ,如此一來,當 CSVDictWriter 存取到我們沒設定值的欄位時,都能夠由 defaultdict 自動返回一個預設值給 CSVDictWriter 使用。

簡單吧!

對抗久坐職業傷害

研究指出每天增加 2 小時坐著的時間,會增加大腸癌、心臟疾病、肺癌的風險,也造成肩頸、腰背疼痛等常見問題。

然而對抗這些問題,卻只需要工作時定期休息跟伸展身體即可!

你想輕鬆改變現狀嗎?試試看我們的 PomodoRoll 番茄鐘吧! PomodoRoll 番茄鐘會根據你所設定的專注時間,定期建議你 1 項辦公族適用的伸展運動,幫助你打敗久坐所帶來的傷害!

贊助我們的創作

看完這篇文章了嗎? 休息一下,喝杯咖啡吧!

如果你覺得 MyApollo 有讓你獲得實用的資訊,希望能看到更多的技術分享,邀請你贊助我們一杯咖啡,讓我們有更多的動力與精力繼續提供高品質的文章,感謝你的支持!