排序csv文件(Python)

时间:2017-02-06 14:39:40

标签: python sorting csv

我编写了这段代码,用于在Python中对csv文件进行排序。

ROW_NUMBER

我正在尝试按数组中的第二项排序文件,例如,如果在我的文件中,我有:

import csv
from operator import itemgetter
reader = csv.reader(open("highscores.txt"), delimiter=",")
sortedList = sorted(reader, key=itemgetter(1), reverse=True)
print(sortedList)

它将它排序为:

Callum,22
Kim,43

然而,当我运行程序时,我收到错误消息:

Kim,43
Callum,22

编辑:

我已经解决了这个问题,问题不在于sort函数本身,但是由于某些原因,这个文件只能在python 2.7中运行。

2 个答案:

答案 0 :(得分:0)

你可以使用lambda来进行类型转换等。与上面的例子类似,下面的行会做你想要的(我保持排序等默认):

r = csv.reader(open("test.txt"))
sorted(r, key=lambda x: int(x[1]))

您可以在https://wiki.python.org/moin/HowTo/Sorting

了解更多详情

这些是显示版本和平台的完整详细信息:

Python 2.7.10 (default, Jul 30 2016, 18:31:42) 
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import csv
>>> r = csv.reader(open("test.txt"))
>>> sorted(r, key=lambda x: int(x[1]))
[['Can', ' 2'], ['Try', ' 5'], ['Science', ' 12'], ['Math', ' 22'], ['Life', ' 35']]

其中test.txt如下:

Science,12
Math,22
Life,35
Can,2
Try,5

答案 1 :(得分:0)

我的假设是你遗漏了一些数据。以下是该案例的解决方法:

import csv

with open("highscores.txt") as data:
    data = csv.reader(data)
    data = [item for item in data]
    for i, item in enumerate(data):
        try:
            item = int(item[1])
        except:
            data[i].append('0')
    items = sorted(data, key=lambda x: int(x[1]), reverse=True)
    print(items)