为了账号安全,请及时绑定邮箱和手机立即绑定

在 Python 中对文件中的分数进行排序

在 Python 中对文件中的分数进行排序

凤凰求蛊 2021-10-19 17:04:16
这是使用该文件的部分:file = open('Dice Game.txt', 'a')file.write(winner + '\n')file.close()file = open('Dice Game.txt', 'r')for line in file:    name = line.strip()    print(name)file.close()我知道打印乐谱的部分非常笨重,但这似乎是我让它正确打印的唯一方法。我已经尝试了很多我在网上找到的不同解决方案,但没有一个解决方案按降序对文件进行数字排序(并打印前 5 个分数),它们似乎都给出了错误(当尝试使用sort和sorted)。变量获胜者如果定义为:winner = str(score) + '=' + str(username)我想弄清楚我应该如何更改该变量或如何按原样对其进行排序。
查看完整描述

3 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

要简单地附加一个条目,您不需要打开文件两次,因为您可以在r+模式下打开。这将让你阅读和写作。rmode 将文件指针放在文件的开头而不是结尾。当你打开文件时,你应该使用一个with语句来自动关闭文件,即使发生错误:


with open('Dice Game.txt', 'r+') as file:

    data = [line.strip() for line in file]

    print(winner, file=file)

data.append(winner)

赋值给的理解将data文件指针移到最后。然后print语句写到最后。


对数据进行排序是完全独立的蠕虫。您必须拆分数据并按分数的数值进行排序。然后你将不得不重写整个文件。虽然您可以通过一次打开来完成此操作,但在您的原始示例中打开两次可能会更容易:


fname = 'Dice Game.txt'

with open(fname, 'r') as file:

    data = [int(score), name.rstrip() for score, name in (line.split('=', 1) for line in file)]

data.sort()

with open(fname, 'w') as file:

    file.writelines(f'{score}={name}\n' for score, name in data)


查看完整回答
反对 回复 2021-10-19
?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

让我们存储文件中的内容。


lines = []

for line in file:

    winner = line.strip()  # something like '30=Jim'

    score, name = winner.split('=')  # => '30', 'Jim'


    # now store that information for later

    lines.append((int(score), name))  # we're putting (30, 'Jim') in lines


# lines contains [(30, 'Jim'), (20, 'Amy'), (60, 'Susan'), ...]

print(lines)

您现在可以使用您在网上找到的一种方法进行排序lines吗?


查看完整回答
反对 回复 2021-10-19
  • 3 回答
  • 0 关注
  • 192 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信