如何以数字方式对.txt文件进行排序

时间:2016-12-01 12:19:29

标签: python sorting

我无法通过数值对.txt文件进行排序。我附上了代码,并试图让它按分数排序, 我也无法将每个新分数打印到txt文件中的新行。

def Highscore():
    name = input("What is your name for the scoreboard?")
    newhighscore =(name, highscore)
    newline = ("\n")
    HighscoreWrite = open ("highscore.txt", "a")
    HighscoreWrite.write(highscore )
    HighscoreWrite.write(name )
    HighscoreWrite.write("\n")
    HighscoreWrite.close()
    HighscoreRead = open("highscore.txt", "r" )
    ordered = sorted(HighscoreRead)


    print (ordered)    



    print (HighscoreRead.read())
    #print (newhighscore)
    HighscoreRead.close()
retry = "Yes"
while retry == "Yes":
    print ("Welcome to this quiz.\n")
    score = 0
    attempt = 0
    while score < 10:
        correct = Question()
        if correct:
            score += 1
            attempt += 1
            print ("Well done, You got it right")
        else:
            print ("Good try but maybe next time")
            attempt += 1
    highscore = score, ("/") ,attempt
    highscore = str(highscore)
    message = print ("You scored", (score), "out of ",(attempt))
    Highscore();
    retry = input("Would you like to try again? Yes/No")

1 个答案:

答案 0 :(得分:1)

为了以数字方式对文件进行排序,您必须创建一个key(line)函数,该函数将一行作为参数并返回分数的数值。

假设highscore.txt是一个文本文件,其中每行以数字值开头,后跟空格,key函数可以是:

def key_func(line):
    return int(line.lstrip().split(' ')[0])

然后,您可以使用ordered = sorted(HighscoreRead, key = key_func)

由于它是单行函数,您还可以使用lambda:

ordered = sorted(HighscoreRead, key= (lambda line: int(line.lstrip().split(' ')[0])))