使用Python从文件中排序分数

时间:2019-01-24 17:23:10

标签: python

以下是使用文件的部分:

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分),它们似乎都给出了错误(尝试使用东西时)例如sortsorted)。

变量赢家,如果定义为:

winner = str(score) + '=' + str(username)

我想弄清楚应该如何更改该变量或如何对其进行排序。

3 个答案:

答案 0 :(得分:0)

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

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进行排序吗?

答案 1 :(得分:0)

只需添加一个条目,就无需两次打开文件,因为可以在r+模式下打开。这将使您能够读写。 r模式将文件指针放在文件的开头而不是结尾。打开文件时,即使发生错误,也应使用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)

答案 2 :(得分:-1)

file = open("something.txt", r)
contents = file.read()

##Now you may play with the file contents
each_line = contents.split("\n")
##Each line of your file content will be stored in a list
##Access each element as:
for items in each_line:
    print(items)
    ##Do something
##Sorting
contents.sort()
##Now the contents of list are sorted
print(contents)