将用户数据添加到行python

时间:2015-10-23 11:37:38

标签: python rows

我正试图弄清楚一些简单的东西。我正在敲打我的脑袋。

基本上我有.CSV,其中包含名称和测试分数,例如

Brad 4, 5, 7, 7
Dan 3, 6, 2, 7

我想要做的是编写代码,首先打印出测试分数。这个位工作正常。

我无法工作的方面是程序在CSV中读取名称的部分。如果名称存在,则会在开头添加新分数的CSV。因此,在数组位置1插入新值。

如果CSV中没有该名称,它将添加名称,然后再将值插入数组位置1.

这是目前不起作用的代码,我不认为它复杂但我必须考虑错误。

import csv
def names():
    global fn
    fn = input("please enter first name \n").title()
    namecheck = False
    while namecheck == False:
        nc = input("you have entered " + fn + " are you sure \n 1) Yes \n 2) No")
        if nc == "1":
            quiz()
            namecheck = True
        if nc =="2":
            names()

def quiz():
    option = input("do you want to print or append? \n 1) Print 2) Append")
    if option =="1":
        f = open('namelist.csv', 'r')
        a = f.read()
        print(a)
    if option =="2":
        score = input("please enter score")
        score = int(score)
        with open('namelist.csv', 'rt') as f:
            reader = csv.reader(f, delimiter=',')
            for row in reader:
                for field in row:
                    if field == fn:
                        XXXXXXXX <--- this is were I think I am going wrong.
names()

2 个答案:

答案 0 :(得分:0)

当您声明def时,您必须缩进整个部分。

def quiz():
[-->INDENT HERE!] option = input("do you want to print or append? \n 1) Print 2) Append")
[-->INDENT HERE!] rest of def..

#back to main statements..

(当然我不是故意要你输入“[ - &gt; INDENT HERE!]”字面意思)

答案 1 :(得分:0)

每次有人添加新分数或新名称时,您是否必须真正写入文件?如果在程序结束时写入文件是一个选项,我建议提前收集所有信息,然后将数据批量写入结尾......这样你就可以维护内存中的所有内容并使用I / O进行操作。文件一次性使用,节省了大量的文件操作,并为您提供了使用python数据结构(如dicts / sets等)的便利....

如果那不是一个选择...... 通过读取文件来查找名称是非常低效的,因为您正在阅读整个文件,只是为了查看名称是否存在。

我建议使用dict来存储您已输入的名称列表。这样检查dict以查看名称是否存在更有效...您可以尝试存储带有key = name和value =行号的dict,并在写入时输入名称CSV。

这样,如果你在dict中找到了这个名字,你就可以去特定的行,然后像这样追加你的数据:

Start reading and writing on specific line on CSV with Python

要在第一个位置插入一个元素(我假设这是在名称之后),你可以这样做:

l = line.split(",")
#assumes first element is the name of the person 
l.insert(1, new_score) # 1 is the position you want to insert the data
#then insert this data into a_NEW_CSV file, as writing to same CSV at same line is difficult...

详情请见Replace data in csv file using python