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 使用。
簡單吧!