为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

月关宝盒 2021-10-19 09:43:28
我有一个要写入 CSV 文件的字典。但是,dict 中的某些键有一个值列表,我想将列表的每个元素水平写入单独的单元格中。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 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

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


查看完整回答
反对 回复 2021-10-19
  • 1 回答
  • 0 关注
  • 237 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信