读取和写入名称和分数列表 - python

时间:2014-11-18 19:34:49

标签: python

我正在尝试创建一个程序,为用户提供一个简短的测验并创建一个得分,我已经完成了,然后我想将它们添加到.txt文件中的列表中。在程序中,我会问他们他们的名字,所以说我有一个这样的清单;

鲍勃,7

比尔,5

简,6

并且有人接受测验并输入名称Bob并获得列表将更新的分数4;

鲍勃,4

比尔,5

简,6

或者有新人参加测验,Sarah会改为;

鲍勃,4

比尔,5

简,6

萨拉,7

到目前为止,我有;

import random
file = open("scores.txt", "r")

UserScore=random.randint(0,10)

lines = file.readlines()

file.close()

student=input('What is your name? ')

file = open("scores.txt", "w")
for line in lines:
    line = line.strip()
    name, score = line.strip().split(",")
    if name!=student:
        file.write(line)
    else:
        file.write(name +',' +str(UserScore))

我现在已经将分数随机化,以便更容易阅读,但是这将来自用户正确回答的内容,我认为这段代码会读取文件,然后检查每行的每个名称,如果名称是输入与列表中的名称相同,该行将替换为名称和分数。但是,文件最后空白,我做错了什么?

4 个答案:

答案 0 :(得分:0)

以下是我认为使用Python pickle模块的更好主意:

在[1]中:导入泡菜

在[2]中:得分= {' Bob' 75,' Angie':60,' Anita':80}#创建一个名为得分的词典

在[3]中:pickle.dump(得分,打开(' scores.dat',' wb'))#dump将pickle对象放入文件

在[4]中:!ls scores.dat #verify文件已创建
scores.dat

在[5]中:!cat scores.dat #list输出文件 (DP0
S'鲍勃'
P1
I75
SS'安琪'
P2
I60
SS'阿妮塔'
P3
I80

在[9]中:tscores = pickle.load(打开(' scores.dat',' rb'))#验证:将文件中的pickle对象加载到新文件中字典

在[10]中:tscores #Verification:列出新的词典
Out [10]:{' Angie':60,' Anita':80,' Bob':75}

在[11]中:得分== tscores #Verify dict对象相当于新创建的dict对象
出[11]:真实

答案 1 :(得分:-1)

我尝试了你的代码,第一次运行它,然后你在一行中重写文件。因此,下次在此单行文件上运行脚本时,您会在split函数中获得解包异常,因此您不会对该文件写任何内容,从而导致文件为空。

解决方案可能是在将行写入文件时再次添加换行符。

import random
file = open("scores.txt", "r")

UserScore=random.randint(0,10)

lines = file.readlines()

file.close()

student=input('What is your name? ')

file = open("scores.txt", "w")
for line in lines:
    line = line.strip()
    name, score = line.strip().split(",")
    if name!=student:
        file.write(line + '\n')
    else:
        file.write(name +',' +str(UserScore) + '\n')

答案 2 :(得分:-1)

这应该做你想要的事情

import random
file = open("scores.txt", "r")

UserScore=random.randint(0,10)

lines = file.readlines()

file.close()

student=input('What is your name? ')
flag = True
file = open("scores.txt", "w")
for line in lines:
    line = line.strip()
    name, score = line.strip().split(",")
    if name!=student:
        file.write(line + '\n')
    else:
        file.write(name +',' +str(UserScore) + '\n')
        flag = False
if flag:
    file.write(student +',' +str(UserScore) + '\n')

答案 3 :(得分:-1)

我调整了一些你的代码并冒昧地删除随机部分和名称,得分部分。但我得到了一些工作代码。我认为你可以让它适合你的情况。

file = open("scores.txt", "r+")
lines = file.readlines()
file.close()
us = 15

student = input('What is your name? ')

ls = []
file = open("scores.txt", "r+")
found_student = False

for line in lines:

    line = line.strip()
    ls = line.split(",")
    print("Parsing: " + str(ls))

    if not line:
        print("Empty line")
        pass
    elif ls[0] != student:
        file.write(line + "\n")
    else:
        found_student = True
        file.write(ls[0] + ',' + str(us) + "\n")

if not found_student:
    file.write(student + ',' + str(us) + "\n" )

file.close()