我有一个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)
答案 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)