Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从文件中读取文本,然后按降序排序?_Python_Python 3.x - Fatal编程技术网

Python 如何从文件中读取文本,然后按降序排序?

Python 如何从文件中读取文本,然后按降序排序?,python,python-3.x,Python,Python 3.x,我刚刚开始学习Python,我已经为一个骰子游戏编写了代码,我已经将高分保存在一个文本文件中,最后,我想输出前5名的高分 我已经用以下结构将每个分数保存在文本文件中:name:score 下面是我写的代码: file = open ("DiceGameScores","r") for line in file: file_line = line.split(": ") value = file_line[-1]

我刚刚开始学习Python,我已经为一个骰子游戏编写了代码,我已经将高分保存在一个文本文件中,最后,我想输出前5名的高分

我已经用以下结构将每个分数保存在文本文件中:name:score

下面是我写的代码:

file = open ("DiceGameScores","r")
for line in file:
    file_line = line.split(": ")
    value = file_line[-1]
    print (value)
    scores = value
print (scores)

mylist = []
mylist.extend (scores)
print (mylist)

mylist.sort(reverse = True)
print (mylist[0:5])

file.close()
我已经输出了分数和要检查的列表,当我运行它时,我得到:

62

58

57

44

46

46

['4', '6', '\n']
['6', '4', '\n']
46是最近的最高分 程序将每个数字作为列表的值,并接受代码的新行(\n)部分


如何按顺序获得前5名的高分以及整数?

使用pandas,您可以将文件读入数据框,然后显示分数,例如

import pandas as pd

df = pd.read_csv("data.txt",sep=':', header=None)
df.columns = ["name","score"]
df.sort_values("score", inplace=True, ascending=False)
df.iloc[:3]
显示前三名分数

    name    score
3   d       78
2   c       67
1   b       56

您需要的是在循环之外声明一个列表。然后将更新后的
分数添加到列表中。代码的其余部分随您的需要而定

file = open("DiceGameScores", "r")
mylist = []
for line in file:
    file_line = line.split(": ")
    value = file_line[1]
    print(alue)
    scores = value
    print(scores)
    mylist.append(scores)


print(mylist)
mylist.sort(reverse=True)
print(mylist[0:5])

你的两个主要问题是:

  • 使用
    扩展
  • 。。。在循环之外
获取一个iterable(在这种情况下是文件中的字符串),并将其所有元素添加到列表中。这就是为什么您会得到
['4','6']
。除此之外,你只会得到一个数字,因为你在循环之外这样做。您需要使用
append
将整数相加,然后在循环内部执行此操作。您还应将分数转换为整数,以便进行适当排序:

mylist=[]
打开(“DiceGameScores”、“r”)作为文件:
对于文件中的行:
file_line=line.split(“:”)
值=文件\行[-1]
打印(值)
mylist.append(int(value))
打印(mylist)
mylist.sort(反向=True)
打印(mylist[:5])


注意使用打开文件-这是Python中处理文件的惯用方法。比使用
打开/关闭
要好得多。拥抱它

请举例说明文本文件的外观。是否还需要输出名称?否则,将分数放入列表并对列表进行排序。@Daniel是的,我需要用score@M-Chen-3文本文件只是用户名,一个空格,然后是冒号,另一个空格然后是score
mylist.extend(scores)
应该是
mylist.append(int(scores))
并在循环中移动