繁体   English   中英

写入 CSV 而不将单词标记为字母

[英]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()期望将一组值转换为一行字段。 相反,您将一个组合在一起的字符串传递给它,这导致每个字符都被解释为一个字段。

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

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM