2011-12-08 48 views
-4

我有一個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)) 

有人可以把我在正確的方向。謝謝

+0

CSV文件內容的樣子? – m1k3y3

+0

它只是一個csv文件,有nubers,文本描述和日期字符串。日期字符是我如何排序。你可以從我發佈的代碼告訴我數據的外觀..我在哪裏讀str,long,int ..謝謝 – user1087809

+0

也許這就是你想知道的。它是一個多重排序,我必須按公司排序它,然後數據 – user1087809

回答

1

我想你只是想在轉換之前將它轉換爲元組列表,對吧?您可以通過使用壓縮功能做到這一點:

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)) 
+0

謝謝你們,當我失業時,我會嘗試這些sugestions。 – user1087809

+0

立即排序聽起來不錯,我不知道它可以做到這一點。我使用py2.4.3所以可能有一些我沒有的東西,但我會排序。 – user1087809