从文件中读取数据并进行排序

-4 投票
1 回答
730 浏览
提问于 2025-04-17 07:58

我有一个关于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))

撰写回答