Python使用名称和分数对文件进行排序

时间:2016-05-10 17:56:21

标签: python file sorting readlines

我目前有一些数据存储在一个文件中,该文件中有一个人名和他们在玩游戏时得到的分数。

文件中的数据如下所示:

Reece 0
John 5
Alex 2

我尝试过这样的事情:

with open("Scores.txt","r") as f:
    lines = sorted(f.readlines())
    print lines

但是,只需按照每个名字的第一个字母对它们进行排序。

我的输出必须是这样的:

Reece 0
Alex 2
John 5

这是一个相对简单的程序,我使用的是Python 2.7

任何帮助都会很棒我也可以提供有关我程序的任何信息!

2 个答案:

答案 0 :(得分:2)

密钥可以这样工作:

with open("test.txt","r") as f:
     lines = sorted(iter(f), key=lambda x: int(x.partition(" ")[-1]))
     print lines

由于你只创建了一个列表,因此它将具有内存效率,而且当你在文件的行上只迭代一次时,它会非常快。

总的来说,我认为这是最快,最有效的方法。

因此包括输出在内的完整功能将是:

with open("test.txt","r+") as f:
     lines = sorted(iter(f), key=lambda x: int(x.partition(" ")[-1]))
     f.seek(0)
     f.truncate()
     [f.write(l if l.endswith("\n") else l + "\n") for l in lines]

答案 1 :(得分:0)

添加cmp参数调用sorted

with open("test.txt","r") as f:
     comparator = (lambda x,y: cmp(int(x.split(' ')[-1]), int(y.split(' ')[-1])))
     lines = sorted(f.readlines(), cmp=comparator)
     print lines