我正在制作一个代码,用于检查某个用户名是否在文本文件中。 如果是,则存储分数。但是,一旦达到3分以上,它就会删除最旧的,以保持3分。
这是我的代码:
if userclass=="1":
filefordataclass1 = open("Class1scores.txt", "a"); #this opens/creates a new text file
filefordataclass1.write(str(username) + ":" + str(score))#this converts the
filefordataclass1.write("\n")
user_scores = {}
with open("Class1scores.txt", "r+")as file:
file.seek(0)
scores = file.readlines()
for line in scores:
name, scores = line.rstrip('\n').split(':',1)
if name not in user_scores:
user_scores[name] = deque(maxlen=3)
temp_q = user_scores[name]
temp_q.append(str(score))
user_scores[name] = temp_q
filehandle=open("Class1scores.txt", "w")
for key, values in user_scores.items():
filehandle.write(name + ',')
filehandle.write(','.join(list(values)) + '\n')
filehandle.close()# Initialize score list
filefordataclass1.close
如果你能告诉我python代码有什么问题以及如何修复它会非常感激。
答案 0 :(得分:1)
不要多次冒险。首先阅读内容,然后添加新分数,然后写下所有内容:
int count = cmd.ExecuteNonQuery();
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
GvProj.DataSource = dt;
GvProj.DataBind();
GvProj.Visible = true;
GvInvidual.Visible = false;
否则你会在寻找错误时迷失方向。
答案 1 :(得分:0)
您应该使用" a"打开输出文件。 (追加)代替" w" (写)。
答案 2 :(得分:0)
无需在写入模式下再次打开文件,因为您已经使用r +以读/写模式打开文件。在将文件数据存储在变量中后,使用搜索和截断。代码如下:
from collections import defaultdict, deque
userclass = "1"
if userclass=="1":
user_scores = defaultdict(lambda: deque(maxlen=3))
f = open("Class1scores.txt", "r+")
lines = f.readlines()
print lines
for line in lines:
name, scores = line.rstrip().split(':')
user_scores[name].extend(scores.split(','))
if len(user_scores) > 0:
f.seek(0)
f.truncate()
for key, values in user_scores.items():
f.write('%s:%s\n' % (key, ','.join(list(values))))
f.close()
希望这有助于:)