为什么这段代码只删除文件的全部内容?

时间:2016-03-28 08:37:59

标签: python

我正在制作一个代码,用于检查某个用户名是否在文本文件中。 如果是,则存储分数。但是,一旦达到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代码有什么问题以及如何修复它会非常感激。

3 个答案:

答案 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()

希望这有助于:)