Python 在不将单词标记为字母的情况下写入CSV

Python 在不将单词标记为字母的情况下写入CSV,python,csv,Python,Csv,因此,我想从字典“data”(见下面的代码)中获取键,并将一行标题写入csv文件,因此我将有两列,“name”和“language”。然后我想有四行,第一行是“Dave,Python”,第二行是“Dennis,C”,依此类推。应该是这样的: 名称、语言 戴夫,Python 丹尼斯,C 彼得,爪哇 杰斯,巨蟒 代码: 以下是我实际得到的: 名称、语言 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,

因此,我想从字典“data”(见下面的代码)中获取键,并将一行标题写入csv文件,因此我将有两列,“name”和“language”。然后我想有四行,第一行是“Dave,Python”,第二行是“Dennis,C”,依此类推。应该是这样的:

名称、语言
戴夫,Python
丹尼斯,C
彼得,爪哇
杰斯,巨蟒

代码:

以下是我实际得到的:

名称、语言
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()
将iterable作为参数,并将所有部分作为单独的值写入csv

你给它一个字符串(
f'{n}{l}'
),这是一个由字符组成的iterable,它解释了你得到的输出

您应该这样做:

        writer.writerow([n, l])

这就给了它一个字符串列表,将每个字符串写入到自己的位置,而不会将其拆分。

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

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

writer.writerow([n, l])
或者干脆不用麻烦从
zip()
操作中解构枚举值

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

[Overkill]如果您不介意添加(不必要的)包,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)

只是为了扩展:字符串和列表(
[]
在puthon中称为list)是可iterable的,元组、集合等也是可iterable的。因此,其他可iterable的工作方式也类似。字符串和列表是下面的数组并不重要。
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)