2016-05-21 49 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”的缩进。现在我已经做了必要的修改以使其正常工作,并通过运行验证了它。谢谢你指出。 –

相关问题