在多行中编写CSV - Python 2.7

时间:2016-08-09 14:19:27

标签: python list python-2.7 csv

我正在制作一个包含游戏玩家数据记录器的csv文件。 csv样本显示4个玩家(10行)和13列:

Player_ID,Name,Age,DOB,Gender,Game1_result,Date_first_game,Game2_result,`Game3_result,Final_result,Team,Date_last_game,Finals_dates`
101,Ethan,16,1/15/2000,Male,won,3/20/2013,lost,won,lost,yellow,3/20/2013,3/20/2013
101,Ethan,16,1/16/2000,Male,won,12/6/2015,won,won,"won, full",yellow,12/6/2015,12/6/2015
101,Ethan,16,1/17/2000,Male,lost,1/6/2016,won,won,lost,yellow,1/6/2016,1/6/2016
102,Emma,19,6/17/1997,Female,won,1/9/2013,lost,lost,lost,green,1/9/2013,1/9/2013
...........
...........

我创建了一个python脚本,将日期转换为年龄,然后输出更改的文件。我使用csv reader和writer来读取和写入最终输出文件(csv从单个列表中写入所有数据都附加到其中)。最终文件应该只包含12列(未写入名称),并且所有日期列都转换为该特定日期的玩家年龄。

import csv

##open data containing file

file1=open('example.csv','rb')
reader=csv.reader(file1)
####code to print headers
####age_converter() definition 

final_output=[]
for col in reader:
    final_output.append(col[0])#appends Player_ID
    final_output.append(col[2])#appends Age
    final_output.append(age_converter(col[3]))#appends value of date converted to age
    for r in range(4,6):
        final_output.append(col[r])#appends gender and game1 results
    final_output.append(age_converter(col[6]))#appends date of first game
    for r in range(7,11):
        final_output.append(col[r])#appends game results (5 columns)
    for r in range(11,13):
        final_output.append(age_converter(col[r]))#appends last and final dates

with open('output.csv','wb')as outfile:
    csv_writer=csv.writer(outfile)
    csv_writer.writerow(header)
    csv_writer.writerow(final_output)


file1.close()
outfile.close()

年龄转换器工作正常,但输出文件包含一行中的所有数据。我试图将列逐个附加到列表中并将其写入csv,这有效,但是通过索引键入每个列是不切实际的,特别是我正在处理的原始文件有超过50列! 所以我的问题是:如何将数据写入多行而不是只有一行?

输出样本:

Player_ID,Age,DOB,Gender,Game1_result,Date_first_game,Game2_result,Game3_result,Final_result,Team,Date_last_game,Finals_dates
101,17,Male,won,20,lost,won,lost,yellow,20,20,101,16,16,Male,won,19,won,won,"won, full",yellow,.....................

1 个答案:

答案 0 :(得分:0)

您要将所有数据附加到final_output。相反,将列表列为:

for row in reader:
    new_row = []
    new_row.append(row[0])
    ...
    final_output.append(new_row)

然后写入文件时:

csv_writer.writerow(headers)
for row in final_output:
    csv_writer.writerow(row)

两个注释:

  1. 始终使用with open(...) as somefile。当你这样做时,你不需要关闭文件。
  2. 结帐csv DictReader类,以便于操作。