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

Python使用名称和分数对文件进行排序,python,file,sorting,readlines,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 我尝试过使用类似的方法: Reece 0 John 5 Alex 2 with open("Scores.txt","r") as f

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

文件中的数据如下所示:

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
我尝试过使用类似的方法:

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
但这只是按照他们名字的第一个字母来排序

我的输出需要如下所示:

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

任何帮助都将是惊人的,我还可以提供我的程序的任何信息

将参数添加到已排序的
调用中:

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

钥匙的工作原理如下:

with open("test.txt","r") as f:
     lines = sorted(iter(f), key=lambda x: int(x.partition(" ")[-1]))
     print lines
这将是内存效率高的,因为您只创建了1个列表,并且您只在文件行上迭代了一次,这将非常快

总的来说,我相信这是最快、最有效的方法

因此,包括输出在内的全部功能如下:

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]

因此,您需要按数字(0,2,5)对行进行排序?现在没有对任何内容进行排序,只是为了澄清,这段代码所做的是遍历文件中的每一行(iter(f)),并告诉sorted()函数根据lambda(匿名)函数(lambda x:int(x.partition(“”[-1])进行排序它通过将每行的分数与行中的名称(x.partition(“”[-1])分开来获取每行的分数。这将把文件中按分数排序的行列表存储到变量行中,然后在最后打印出来。我认为sorted()函数中不需要iter(f),而是可以使用f,因为sorted()函数接受iterable作为第一个参数,即file(f)。@标记您是正确的,我使用了
iter()
只是为了澄清一下,它根本不会造成任何开销,这完全取决于您的偏好。