2015-06-27 105 views
-1

我创建了一个算术测验,询问学生一些问题,然后将其名称和分数保存到csv文件中。使用if语句将列添加到csv文件

我想创建一段代码,它会询问一个csv文件的if语句。类似的,如果名字已经在第一列中,则将新分数放在新列上。

这就是我所做的将名称和分数写入csv文件。

if Class==("a"): 
    with open("a.csv","a") as my_file: 
    my_file.write("{}, {}/10\n".format(name,correctanswers)) 

这写的名字和分数到类文件,但我在写文件之前,需要一个if语句。

伪代码:

if name = column1 on a.csv: 
    then write correctanswers to new column 
else: 
    write name and score on a.csv 

所以说,我再次参加测验,我的名字已经上了CSV,我需要的代码,以我的新成绩,并就其添加到我的现有记录的CSV (将新分数保存到下一列)。

+0

所以,如果你对你的第一次尝试实现'6/10'和第二则'7/10',如若真的比分读'13/10'?或者,你的意思是“将其添加到我现有的记录”中的其他内容? –

回答

0

如果以"a"(追加)模式打开文件,那么很明显,您不能修改或更新文件中的现有记录,因为所有写入都发生在文件的最后一个位置之后。

您应该将整个CSV文件读入内存,更新那里的记录,然后回写整个文件(最好在完成所有修改后)。

像这样的东西可以工作:拥有所有的名字和他们的成绩是很容易(使用setdefault())更新的字典

import csv 
def readcsv(filename): 
    with open(filename,"rb") as csvfile: # assuming Python 2 
     return dict(csv.reader(csvfile)) 

然后你。缺点是您将失去CSV文件中条目的存储顺序。

保存字典作为一个CSV文件很容易,以及:

def writecsv(mydict, filename): 
    with open(filename,"wb") as csvfile: # assuming Python 2 
     writer = csv.writer(csvfile) 
     writer.writerows(mydict.iteritems())