我如何编写/维护一个.txt文件,其名称和时间(分数列表)按时间增加排序?

时间:2015-11-25 16:47:40

标签: python file sorting text

这是我到目前为止所做的,但它不起作用:

def InsertInsideTheTopPlayer (name, time):

  players = []
  with open("playersScores.txt") as f:
      for line in f:
          name, time = line.split(',')
          time = float(time)
          players.append((name, time))

  players.sort(key=lambda s: s[1])
  strtime = str(time)
  for name, time in players:
      f.write("%s\n" % (name+", "+ strtime))

name是一个字符串,time是一个浮点数(四舍五入到小数点后两位)。

经过一些编辑后,这就是我所拥有的:

def InsertInsideTheTopPlayer (name, time):

players = []
strtime = str(time)
players.append((name, strtime))
with open("playersScores.txt", "r") as f:
    for line in f:
        name, strtime = line.split(',')
        players.append((name, strtime))
f.close()  

players.sort(key=lambda tup: tup[1])

with open("playersScores.txt", "w") as f:
    for (name, strtime) in players:
        f.write("%s\n" % (name+","+ strtime))
f.close()

它适用于2次迭代然后给出:

line 10, in <module>
players.append((name, strtime))
builtins.ValueError: need more than 1 value to unpack

看来排序会添加空行 任何人都可以指出我如何解决这个问题的正确方向吗?

移动线8&amp; 9进入if line != '\n':是一种解决方法,但我不知道如何阻止空行发生。

if line != '\n':
            name, strtime = line.split(',')
            players.append((name, strtime))

1 个答案:

答案 0 :(得分:1)

有几个问题:

  • 你永远不会将你的新玩家添加到玩家列表中(你在名字和时间上传递,你可能需要从players = [(name, time)]之一开始,或者在循环之后拥有players.append((name, time))
  • 您尝试同时读取和写入相同的文件句柄,您需要关闭f(使用f.close())然后重新打开它以进行书写。
  • 你需要在循环中重置strtime,否则你会用第一个玩家的时间覆盖每个玩家的次数