[英]Writing to CSV without tokenizing words into letters
所以,我想从字典“数据”[见下面的代码]中取出键并将一行标题写入 csv 文件,所以我将有两列,“名称”和“语言”。 然后我想要四行,第一行是“Dave,Python”,第二行是“Dennis,C”,依此类推。 应该看起来像:
姓名、语言
戴夫,Python
丹尼斯,C
彼得,Java
杰斯,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.] 行以某种方式迭代字符串的每个索引,但我不知道为什么会发生这种情况或如何修复它。
在引擎盖下,字符串只是字符的 arrays。 同时, writerow()
期望将一组值转换为一行字段。 相反,您将一个组合在一起的字符串传递给它,这导致每个字符都被解释为一个字段。
您可以将n
和l
重新组合成一个数组
writer.writerow([n, l])
或者干脆不费心从zip()
操作中解构枚举值。
for row in zip(data["name"], data["language"]):
writer.writerow(row)
.writerow()
将一个可迭代对象作为参数,并将所有部分作为单独的值写入 csv。
你给它一个字符串( f'{n}{l}'
),这是一个可迭代的字符,这解释了你得到的 output 。
你应该这样做:
writer.writerow([n, l])
这给了它一个字符串列表,将每个字符串写入它自己的 position,而不会分解它。
[矫枉过正]如果您不介意添加(不必要的)package,Pandas 可以减轻任务。
import pandas as pd
data = {
'name': ['Dave', 'Dennis', 'Peter', 'Jess'],
'language': ['Python', 'C', 'Java', 'Python']
}
df = pd.DataFrame(data)
df.to_csv("dump.csv", index=False)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.