[英]Using csv.DictWriter to write a dictionary's {'key':value} pairs into a .csv file and get " ValueError: dict contains fields not in fieldnames: '
[英]Using DictWriter to write a subset of a dictionary's keys
我編寫了一個函數,使用csv
模塊將字典列表序列化為CSV文件,代碼如下:
data = csv.DictWriter(out_f, fieldnames)
data.writerows(dictrows)
但是,我有時想要只寫出每個字典鍵的子集。 如果我將每個字典所包含的鍵的子集作為fieldnames
傳遞, fieldnames
收到錯誤:
"dict contains fields not in fieldnames"
我如何才能使DictRows只將我指定的字段的一部分寫入CSV,忽略字典中但不在字段名中的那些字段?
最簡單,最直接的方法是通過extrasaction='ignore'
,當你初始化DictWriter
例如,作為記錄在這里 :
如果傳遞給
writerow()
方法的字典包含在字段名中找不到的鍵,則可選的extrasaction參數指示要采取的操作。 如果將其設置為'raise'
則會引發ValueError
。 如果將其設置為'ignore'
,則忽略字典中的額外值。
它也適用於writerows
,它在內部只是反復調用writerow
。
您的代碼更改:
忘記Dictwriter,使用普通作家。
然后遍歷你的dicts列表:
for d in dictrows:
ordinary_writer.writerow([d[fieldname] for fieldname in fieldnames])
使用d.get(fieldname, "")
而不是d[fieldname]
如果你不想例外,如果在沒有進入d
的fieldname
。
請注意匿名downvoters:這正在做Alex的解決方案在幕后做的事情(參見Lib / csv.py)並做得更好...... csv.py調用一個函數來獲取列表中的每一行,以及膽量那個功能是
return [rowdict.get(key, self.restval) for key in self.fieldnames]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.