2016-05-21 92 views
-1

我有一個程序來存儲一個人名和他們的分數,在Python中的csv文件。在python的csv文件中創建一個新的列值對一個csv文件中的現有字符串

例如這是我的當前代碼:

student_name = input("Name: ") 
score = input("Score: ") 

class_name = "student_scores.csv" 

file = open(class_name , 'a') 
file.write(str(student_name) + ", " + str(score) + "\n") 
file.close() 

輸出csv文件是,(名稱= BOB)和(評分= 1):

bob, 1 

當我進入另一個得分( 2)同一個人(BOB)的CSV文件看起來像這樣:

bob, 1 
bob, 2 

但是我怎樣才能改變我的代碼,從而使CSV網絡文件看起來像這樣(擁有超過2列):第一

bob, 1, 2 
+1

您必須從舊文件中讀取數據,確定新文件的內容,並覆蓋該文件。 –

+1

出於好奇,這是從哪裏來的?我經常看到有關這項任務的問題。 –

+0

爲什麼你爲最後一個問題創建了一個幾乎相同的問題? –

回答

0

第一件事情,它更容易使用的csv庫來操縱一個CSV文件。您只需使用列表理解或迭代將csv文件讀入名爲data的列表。這裏,data是列表的列表,內部列表表示csv文件的行。現在使用每個內部列表的每個第一個元素檢查student_name。如果匹配,則將score附加到該內部列表,並將data的內容寫入csv文件。如果不匹配,則以附加模式將student_namescore列表寫入csv文件。

import csv 

student_name = input("Name: ") 
score = input("Score: ") 

with open("student_scores.csv", "r") as f: 
    data = [item for item in csv.reader(f)] 

for item in data: 
    if item[0] == student_name : 
     item.append(score) 
     with open("student_scores.csv", 'w') as f: 
      csv.writer(f).writerows(data) 
     break 
else: 
    with open("student_scores.csv", 'a') as f: 
     csv.writer(f).writerow([student_name, score]) 

希望這會有所幫助。

+0

只是想知道,有無論如何與csv模塊做到這一點?如果不是,那麼這個代碼似乎不適合我,所以你可以請幫助 – Dummy8123

+0

是的,你是對的。我發佈了答案但未經驗證。有一些細微的變化需要完成,例如將文件打開模式從二進制文件改爲文本文件,並糾正「break」的縮進。現在我已經做了必要的修改以使其正常工作,並通過運行驗證了它。謝謝你指出。 –

相關問題