我csv.Dictreader
用来读取 csv 文件,因为通过字段名访问项目非常方便,但是csv.Dictwriter
该类对如何处理字段名非常挑剔。"dict contains fields not in fieldnames"
当我特别不希望 dict 包含我提供的所有字段名时,我得到了很多例外。我还希望能够提供一个字段名列表,其中的键可能不会出现在字典列表的每一行中。
因此,我创建了一种将字典列表转换为可以与该csv.writer.writerow
函数一起使用的二维数组的方法。
问题:
我想知道我的方法是好是坏还是丑陋。是否有更好/更 Pythonic 的方式将具有任意字段名的字典列表转换为二维数组?我错过了一些明显的东西csv.DictWriter
吗?
代码:
它的作用是:
输出将跳过您未提供的字段名,但如果您提供的字段名未出现在每一(或任何)行中,但仍将其包含在顶部的标题中,则输出也将只放置一个空格.csv 文件。
def csvdict_to_array(dictlist, fieldnames):
# Start with header row
csv_array = [fieldnames]
for row in dictlist:
csv_array.append(dictlist_row_to_list(row, fieldnames))
return csv_array
def dictlist_row_to_list(dictlist_row, fieldnames):
csv_row = []
for field in fieldnames:
if field not in dictlist_row:
csv_row.append('')
else:
csv_row.append(dictlist_row[field])
return csv_row
样本输入/输出:
fieldnames = ["one", "three", "ten"]
dictlist = [{"one": "bob", "two": "bill", "three":"cat"},
{"one": "john", "two": "jack", "ten":"dog"}]
Output:
one,three,ten
bob,cat,
john,,dog
谢谢你的时间