从文件中读取数据并进行排序
我有一个关于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 个回答
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))