python - 将文件中的列从高到低排序

标签 python file sorting text-files

我有一个包含一组人的分数的文件。每人有3分。我只能显示该人的最高分。但是,我无法打印到 python shell,最高分按降序排列。例如:

Persona    12
Personb    14
Personc    17
Persond    11

我希望它按分数降序排序。所以它应该看起来像:

personc    17
personb    14
persona    12
persond    11

到目前为止,我已经创建了这段代码,但我不知道如何继续:

with open("class.txt","r") as file:
        lines = file.readlines()
    with open('class.txt','w') as fileout:
        for line in lines:
            fields = line.split()
            name, grades = fields[0], fields[1:]
            grades = [int(grade) for grade in grades]
            grades.sort()
            highest = str(max(grades))
            grades = [str(highest) for grade in grades]
            rows = filter(None, [line.strip().split() for line in open("file.txt", "r")])
            data = [(name, int(highest)) for name, highest in rows]
        for name, highest in sorted(data, key=itemgetter(1)):
            print("{0:s} {1:d}".format(person, score))

最佳答案

这很简单:

from operator import itemgetter


rows = filter(None, [line.strip().split() for line in open("data", "r")])
data = [(person, int(score)) for person, score in rows]

for person, score in sorted(data, key=itemgetter(1), reverse=True):
    print "{0:s} {1:d}".format(person, score)

注意:假设您的输入数据不存在错误数据和一般垃圾。如果您的输入数据干净,您将不得不进一步扩展它!

输出:

$ python test_data.py 
Personc 17
Personb 14
Persona 12
Persond 11

更新:

如果您的数据中有垃圾,就像您在评论中描述的那样。

$ cat data
Persona    12 foo
Personb    14 bar
Personc    17 baz
Persond    11

那么上面的程序就必须使用自定义key稍微修改一下,例如:

def sortkey(row):
    return int(row[1])


rows = filter(None, [line.strip().split() for line in open("data", "r")])

for row in sorted(rows, key=sortkey, reverse=True):
    print "{0:s} {1:s}".format(row[0], row[1])

仍然会产生相同的输出:

$ python test_data.py 
Personc 17
Personb 14
Persona 12
Persond 11

关于python - 将文件中的列从高到低排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29813087/

相关文章:

python - 使用 Tkinter 显示一系列 PIL 图像

使用 numpy/scipy 进行 Python 多处理速度较慢

python - Python 中的异常是什么?

java - 恢复应用程序状态

Python日期字符串测试

HTML压缩文件上传?

c++ - 换行符后停止读取文件

javascript - 在 Javascript 中按自定义顺序放置数组元素的最佳方法

c - 如何在 vector 范围内实现排序?

ios - 如何从具有多个条件的数组中删除重复项?