根据python中csv文件中的现有字符串创建新的值列

根据python中csv文件中的现有字符串创建新的值列,python,python-3.x,csv,file-io,Python,Python 3.x,Csv,File Io,我有一个程序来存储一个人的名字和他们的分数,在python的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() 输出

我有一个程序来存储一个人的名字和他们的分数,在python的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文件是,(name=bob)和(score=1):

当我为同一个人(bob)输入另一个分数(2)时,csv文件如下所示:

bob, 1
bob, 2
但是,如何更改代码,使csv文件如下所示(超过2列):


首先,使用
csv
库操作csv文件更简单。您只需使用列表理解或迭代将csv文件读入名为
data
的列表。这里,
数据
是一个列表列表,内部列表表示csv文件的行。现在用每个内部列表的每个第一个元素检查
student\u name
。如果匹配,则将
分数
附加到该内部列表,并将
数据的内容
写入csv文件。如果不匹配,则在附加模式下,在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])

希望这有帮助

你必须从旧文件中读取数据,找出新文件的内容,然后覆盖该文件。出于好奇,这是从哪里来的?我经常看到关于这项作业的问题。为什么你要创建一个与上一个问题几乎相同的问题?我只是想知道,csv模块是否也可以这样做?如果不是,那么这个代码对我来说似乎不起作用,所以请你帮个忙好吗?是的,你是对的。我在没有核实的情况下发布了答案。需要做一些小的更改,例如将文件打开模式从二进制更改为文本,并更正
break
的缩进。现在,我已经进行了必要的更改,使其能够工作,并通过运行进行了验证。谢谢你指出这一点。
bob, 1, 2
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])