如何将字典写入csv

时间:2016-09-18 22:41:18

标签: python

我有一个CSV文件,其中一列有一个人的名字和姓氏。我正在尝试使用CSV将每个名称分成两列,第一列和最后一列。下面的代码将所有的名字分成一行,将所有的姓氏分成一行,而不是将第一个名称放入一行,而将下一个名称放在第一个名称的下一列中。谢谢你的时间。

代码:     import csv

with open('fullnames.csv','r') as f:
reader = csv.reader(f)
newcsvdict = {"first name": [], "last name": []}
for row in reader:
    first = row[0].split()[0]
    last = row[0].split()[1]
    newcsvdict["first name"].append(first)
    newcsvdict["last name"].append(last)


with open('new.csv','w') as f:
w = csv.DictWriter(f, newcsvdict.keys())
w.writeheader()
w.writerow(newcsvdict)

输出: enter image description here

3 个答案:

答案 0 :(得分:1)

在这个简单的情况下,使用csv.DictWriter几乎没有任何好处,只需使用csv.writer

import csv

header = ['first name', 'last name']
with open('fullnames.csv', 'r') as infile, open('new.csv', 'w') as outfile:
    writer = csv.writer(outfile)
    writer.writerow(header)
    writer.writerows(row[0].split() for row in csv.reader(infile))

如果输入CSV中的name列总是由一个第一个名称和一个由空格分隔的姓氏组成,则此方法可以正常工作。但是,如果可以有双管姓氏,例如Helena Bonham Carter,你需要更加小心分割这个名字。这可能有效:

row[0].split(' ', 1)

但它假设分隔符恰好是一个空格。

答案 1 :(得分:0)

您可以使用pandas编写csv(实际上可以将pandas用于整个问题),这会自动将数据从列的dict转换为行列表:

import pandas as pd
df = pd.DataFrame(newcsvdict)
df.to_csv('new.csv', index=False)

答案 2 :(得分:0)

您正在创建与密钥相关联的单个列表。如@maxymoo建议的那样使用Pandas,或者分别写每一行。

import csv

with open(r'~/Documents/names.csv', 'r') as fh:
    reader = csv.reader(fh)
    with open(r'~/Documents/output.csv', 'w+') as o:
        writer = csv.writer(o)
        for row in reader:
            output = row[0].split(' ', 1)
            writer.writerow(output)