使用csv.DictWriter水平写入列表值

时间:2019-01-23 22:38:25

标签: python csv

我有一个想写到CSV文件的字典。但是,字典中的某些键具有值列表,我想将列表中的每个元素水平地写在单独的单元格中。

data = {"Age": 28, "Name": "Some Name", "Aliases": ["alias1", "alias2"]}
fieldnames = ['Age', 'Name', 'Aliases']

with open(f, 'a') as o:
    writer = csv.DictWriter(o, fieldnames=fieldnames)
    writer.writeheader()
    writer.writerow(data)

别名被期望以数组形式写入单个单元格中。我将列表转换为逗号分隔的字符串data["Aliases"] = ', '.join(data['Aliases']),但此逗号分隔的字符串也被写入同一单元格。

有关如何将列表的每个元素写入单独的单元格的任何想法。

1 个答案:

答案 0 :(得分:0)

CSV文件带有定界符,而不是单元格

这是很小但很重要的一点。 “单元格”的含义大概是在Excel中打开CSV文件时看到的内容。在读取CSV文件的程序中,用逗号分隔符和引号分隔字段内的 具有特殊含义。

csv.DictWriter适用于结构化数据,即每行每个字段一个值。您的数据本质上是非结构化的。如果您希望每行都有任意长度,则可以通过csv.writer来实现:

import csv

data = {"Age": 28, "Name": "Some Name", "Aliases": ["alias1", "alias2"]}
fieldnames = ['Age', 'Name', 'Aliases']

with open('file.csv', 'w', newline='') as fout:
    writer = csv.writer(fout)
    writer.writerow(fieldnames)
    writer.writerow([data['Age'], data['Name'], *data['Aliases']])

结果file.csv

Age,Name,Aliases
28,Some Name,alias1,alias2