сортировка данных, которые считываются из файла - PullRequest
0 голосов
/ 08 декабря 2011

У меня вопрос по питону, но я думаю, что любой программист знал бы достаточно, чтобы отправить меня в правильном направлении. Я нашел действительно хороший код для сортировки данных. Вот пример того, что я хочу использовать:

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 голос
/ 09 декабря 2011

Я думаю, вы просто хотите преобразовать его в список кортежей перед сортировкой, верно?Вы можете сделать это с помощью функции 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...