簡體   English   中英

在多行中編寫CSV-Python 2.7

[英]Write a CSV in Multiple rows - Python 2.7

我正在處理一個包含游戲玩家數據記錄器的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讀取器和寫入器讀取和寫入最終的輸出文件(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,.....................

您將所有數據附加到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類可簡化操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM