gpt4 book ai didi

Python:将数据存储在文本文件中并附加特定/单独的行

转载 作者:太空宇宙 更新时间:2023-11-03 17:29:55 25 4
gpt4 key购买 nike

这是我一直在从事的一个计算机科学项目。测试成绩根据学生姓名保存在文本文件中。例如:

Rob 21
Terry 12
Mike 33

我可以让程序执行此操作,但我希望它读取文本文件的行并确定该名称是否已存在。如果是这样,它应该将下一个分数添加到该行的末尾。如果特里再次参加测试,分数应为:

Rob 21
Terry 12 23
Mike 33

这是相关的代码片段。它在测试完成并且用户输入他们的姓名、类(class)并收到分数后开始。

import fileinput

print("Well done " +name+ ", your score is "+ (str(score)))

entry = (name +" "+ (str(score)))


if classchoice == "A":
classfile = open("classa.txt")
for line in classfile:
if name in line:
oldline = line
newline = (oldline+" "+(str(score)))
print (newline)
classfile.close()
else:
classfile = open("classb.txt","a")
classfile.write(entry)
classfile.write('\n')
classfile.close()

for line in fileinput.input("classa.txt", inplace=1):
line = line.replace(oldline,newline)
line = line.strip()

我在这方面遇到困难,因为:

  1. 第一部分读取文件中的行并找到学生姓名和结果,但当我尝试将行与新分数放在一起时,它最终会在打印时将新分数放在下面(换行符)所以它看起来像:

    特里1223

  2. 另一个问题是 else 不起作用。我得到:赋值前引用的局部变量“oldline”

谁能帮我解决这个问题。我是 python 新手,目前这有点让人不知所措。

最佳答案

这是因为当您读取文件并获取每一行时,它的末尾已经有 newline (\n),所以当您这样做时 -

newline = (oldline+" "+(str(score)))

oldline 末尾已经有 \n 。因此你会得到类似 - Name oldscore\n newscoe 的内容,因此它出现在一个新行上。

在创建换行符之前,您需要删除之前的换行符,示例 -

newline = (oldline.rstrip()+" "+(str(score)))

--

另外,你所做的事情似乎效率很低,你可以直接使用 fileinput.input() 适合你的情况 -

if classchoice == "A":
write_flag = True
with fileinput.input("classa.txt", inplace=1) as f:
for line in f:
line = line.rstrip()
if name in line:
line = line + " " + str(score)
write_flag = False
print(line)
#This is if `name` was never found, meaning we have to add the name to the file with the score.
if write_flag:
with open("classa.txt",'a') as f:
f.write("{} {}\n".format(name,score))
<小时/>

正如评论中所指出的,使用 in 会导致更新错误的条目。克服这个问题的一种方法是拆分行并比较拆分中的第一个条目 -

if classchoice == "A":
write_flag = True
with fileinput.input("classa.txt", inplace=1) as f:
for line in f:
line = line.rstrip()
words = line.split()
if name == words[0]:
line = line + " " + str(score)
write_flag = False
print(line)
#This is if `name` was never found, meaning we have to add the name to the file with the score.
if write_flag:
with open("classa.txt",'a') as f:
f.write("{} {}\n".format(name,score))

关于Python:将数据存储在文本文件中并附加特定/单独的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32036336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com