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