对从文件中读入的数据进行排序

时间:2011-12-08 13:32:15

标签: python sorting

我有一个python问题,但我认为任何程序员都知道足以让我朝着正确的方向发送。我找到了一些非常好的代码来排序数据。以下是我想要使用的示例:

from operator import itemgetter, attrgetter

data = [('red', 1,80), ('blue', 1,900), ('red', 2,50), ('blue', 2,300)]

ss=sorted(data, key=itemgetter(0))

print ss

我的问题是如上所述以这种特定格式获取数据,因为我从csv文件中读取了我的数据,而且我不能像上面的数据一样输入数据,因为我有数据存储在文件中。 我将数据读入python:

reader = csv.reader(open("Meterdata2.csv","rb"));

name=[]; idc=[]; startD=[]; endD=[]; cons=[]; monthdays=[];

for row in reader:

if row[0] != 'IB_id':

name.append(str(row[1])) # name

idc.append(long(row[2])) # idc_acct

startD.append(tcnvrt.str2datetime(row[3]))

endD.append(tcnvrt.str2datetime(row[4]))

cons.append(int(row[6])) # consumption

monthdays.append((tcnvrt.str2datetime(row[4])-tcnvrt.str2datetime(row[3])).days)

IDC=array(idc); Name=array(name); STARTD=array(startD); # these are numpy.ndarray

END_D=array(endD); CONS=array(cons); MONTHDAYS=array(monthdays)

AA=[IDC,Name,STARTD,END_D,MONTHDAYS,CONS]

我想通过我的endD变量对数据进行排序,这是一个日期数组。

我确实在网上找到了一些功能,我认为可能会以特定的形式获取数据来排序,但我无法弄明白。我一直在写这些函数来应用于我的例子,但我不能让它们起作用。

这里是我认为可能对此有用的功能(如果我改变变量):

   def __init__(self, name, grade, age):
            self.name = name
            self.grade = grade
            self.age = age
    def __repr__(self):
            return repr((self.name, self.grade, self.age))
是的,有人可以把我推向正确的方向。谢谢

1 个答案:

答案 0 :(得分:1)

我认为你只想在排序之前将其转换为元组列表,对吗?您可以使用zip函数执行此操作:

l = zip(name, idc, startD, ...)
l.sort(key=...)

但我不明白为什么你不直接对行进行排序......

l = []
for name, idc, ... in reader:
    if name != ...:
        continue
    l.append((str(name), int(idc), ..))

sorted(l, key=itemgetter(0))