python - 写入 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.] 行以某种方式迭代字符串的每个索引,但我不知道为什么会发生这种情况或如何修复它。
解决方案
在引擎盖下,字符串只是字符数组。同时,writerow()
期望将一组值转换为一行字段。相反,您将一个组合在一起的字符串传递给它,这导致每个字符都被解释为一个字段。
您可以重新组合n
并l
重新组合成一个数组
writer.writerow([n, l])
或者干脆不费心从zip()
操作中解构枚举值。
for row in zip(data["name"], data["language"]):
writer.writerow(row)
推荐阅读
- web-audio-api - 通过 Tone.js 连续改变和弦频率
- 2d - 查找透视正方形内每个正方形的中心(2D)
- elasticsearch - 查找重复项时指定 Elasticsearch 聚合字段
- javascript - 我的查询助手方法中是否缺少基本案例?
- azure - Azure 逻辑应用 CTLR+V 功能不再起作用
- swift - Swift:如果文本中包含英文单词,则文本在 AR 中未 RTL 对齐
- php - 无法猜测如何从参数“offer”的请求信息中获取 Doctrine 实例
- fullcalendar - Fullcalendar v3 - selectConstraint - 只允许选择全天
- python-3.x - Tkinter中标签旁边的左对齐输入框?
- python - 如何让 Conda env 使用 Python 3.8?