2015-11-17 75 views
3

我在csv文件中有一組值。這些值如下所示。我希望這些值按層列進行排序,在下面的示例中,它的值爲7208和7209。否則,我希望csv文件完全按照原樣。我的代碼似乎沒有正確排序。如何使用operator.itemgetter()對csv文件進行排序

這裏的CSV文件:

l_d,l_t,utc,SI,UTC,La,Lon,H,layer,N,Pr,EId,Pype,BS,Vo,Te,Chs,PT,Pass 
01-08,11:00:19,03:00:19,0x037,01-08_02:58:03,None,None,None,7208,None,None,None,None,87,15.4,None,None,None,MENT 
01-08,11:00:19,03:00:19,0x037,01-08_02:58:03,None,None,None,7209,None,None,None,None,87,15.4,None,None,None,MENT 

這裏是我當前的代碼:

import sys 
import csv 
import operator 

reader = csv.reader(open("M_B.csv"), delimiter=",") 

sortedlist = sorted(reader, key=operator.itemgetter(9), reverse=True) 

print(sortedlist) 

with open("M_B_Sorted.csv", "wb") as f: 
    writer = csv.writer(f) 
    writer.writerows(sortedlist) 
+0

'鍵= INT(operator.itemgetter(8))' – inspectorG4dget

+0

您需要使用'鍵=拉姆達行:INT(行[8])'加代碼添加到跳過第一行和公正將它從閱讀器複製到作者。 – martineau

回答

2

首先,該指數是錯誤的。它應該是8

而你需要將字符串轉換爲int;不能與itemgetter唯一目的:

sortedlist = sorted(reader, key=lambda row: int(row[8]), reverse=True) 

除此之外,你需要排除頭。

import csv 

with open("M_B.csv") as fin, open("M_B_Sorted.csv", "wb") as f: 
    reader = csv.reader(fin, delimiter=",") 
    writer = csv.writer(f) 
    header = next(reader) # <--- Pop header out 
    writer.writerow(header) # <--- Write header 
    sortedlist = sorted(reader, key=lambda row: int(row[8]), reverse=True) 
    writer.writerows(sortedlist) 
你想
+0

我錯過了我的輸出文件的頂行 – liv2hak

+1

@ liv2hak,我更新了答案。請再檢查一次。 – falsetru

+0

我只需要寫出幾列而不是全部。我可以用'writer.writerow(header [0],header [1])'作爲頭。但是這似乎不適用於writer.writerows(sortedlist) – liv2hak

相關問題