首页 > 解决方案 > 写入 CSV 而不将单词标记为字母

问题描述

所以,我想从字典“数据”[见下面的代码]中获取键并将一行标题写入 csv 文件,所以我将有两列,“名称”和“语言”。然后我想要四行,第一行是“Dave,Python”,第二行是“Dennis,C”,依此类推。应该看起来像:

名称、语言
Dave、Python
Dennis、C
Peter、Java
Jess、Python

代码:

data = {
    'name': ['Dave', 'Dennis', 'Peter', 'Jess'],
    'language': ['Python', 'C', 'Java', 'Python']
}

with open("dump.csv", mode="w", newline="") as f:
    writer = csv.writer(f, delimiter=",")
    writer.writerow(data.keys())
    for n, l in zip(data["name"], data["language"]):
        writer.writerow(f'{n}{l}')

这是我实际得到的:

名称,语言
D,a,v,e,P,y,t,h,o,n
D,e,n,n,i,s,C
P,e,t,e,r,J,a,v ,a
J,e,s,s,P,y,t,h,o,n

我很确定会发生这种情况,因为字符串在 Python 中被索引,而我的 for n, l [etc.] 行以某种方式迭代字符串的每个索引,但我不知道为什么会发生这种情况或如何修复它。

标签: pythoncsv

解决方案


在引擎盖下,字符串只是字符数组。同时,writerow()期望将一组值转换为一行字段。相反,您将一个组合在一起的字符串传递给它,这导致每个字符都被解释为一个字段。

您可以重新组合nl重新组合成一个数组

writer.writerow([n, l])

或者干脆不费心从zip()操作中解构枚举值。

for row in zip(data["name"], data["language"]):
    writer.writerow(row)

推荐阅读