Python:读取包含(字母和数字)的文本文件并更新数字

时间:2015-01-31 15:44:25

标签: python

这些是文本文件中的行

Sponge B - 14
Squid W - 12
Patrick S - 9
Mr K - 19

我如何做到这一点

它变成了这个: 所以最高的数字是最重要的?

Mr K - 19
Sponge B - 14
Squid W - 12
Patrick S - 9

此外,人们可能会再次进行游戏,在这种情况下,他的高分也应该更新。我如何阅读最后的数字,并用新的分数替换?

另外,如果K先生得到19,20,21我希望每次参加考试时都能达到平均水平,那么我该如何做到这一点? (在这种情况下,它将是20。)

我可以读取文件,附加并写入内容。我只是不知道如何通过阅读文件来排序文件,并将其整理出来。

1 个答案:

答案 0 :(得分:1)

读取数据

您的数据 CSV数据。好吧,主要是因为得分由' - '分隔。你可以很容易地回读:

with open('/tmp/d.txt', 'rt') as infile:
    reader = csv.reader(infile, delimiter='-')
    scores = dict((key.strip(), int(value)) for (key, value) in reader)
    print(scores)

产:

{'Squid W': 12, 'Sponge B': 14, 'Mr K': 19, 'Patrick S': 9}

修改数据

现在,由于您的数据存储在字典中,您可以毫无困难地更新任何分数。例如,如果您需要向Mr K添加1个点:

scores['Mr K'] += 1

对它们进行排序

关于按值排序,您可以使用sorted()函数:

import operator
final_data = sorted(scores.items(),
                    key=operator.itemgetter(1),
                    reverse=True)
print(final_data)

导致:

 [('Mr K', 20), ('Sponge B', 14), ('Squid W', 12), ('Patrick S', 9)]

回写

您必须使用正确的格式<name> - <score>输出每条记录。
在这里,我使用"{} - {}".format(...)来达到这个目的:

with open('/tmp/out.txt', 'wt') as outfile:
    for key,value in final_data:
        outfile.write("{} - {}\n".format(key,value))