2014-04-13 90 views
0

我有一個包含數據行的csv文件。第一行是列標題。 我想通過某些參數(特別是第一列)對數據進行排序,但當然要將標題保留在原來的位置。 當我執行以下操作時,標題完全消失,不包含在輸出文件中。 任何人都可以請建議如何保持標題,但跳過它並排序其餘的行? (對於fwiw,第一列是數字和字母的混合)。排序時數據文件的標題消失

謝謝!

這裏是我的代碼:

import csv 
import operator 

sankey = open('rawforsankey.csv', "rb") 
raw_reader = csv.reader(sankey) 


raw_data = [] 
for row in raw_reader: 
    raw_data.append(row) 


raw_data_sorted = sorted(raw_data, key=operator.itemgetter(0)) 

myfiletest = open('newfiletest.csv', 'wb') 
wr = csv.writer(myfiletest,quoting = csv.QUOTE_ALL) 

wr.writerows(raw_data_sorted) 


sankey.close() 
myfiletest.close() 

編輯:要提到我試圖在代碼這種變化:

raw_data_sorted = sorted(raw_data[1:], key=operator.itemgetter(0)) 

,但得到了同樣的結果

+0

我想這是從一些以前的測試... – Optimesh

+0

那麼,我得到的輸出沒有1,2,3 ....在第一列,第一行 - 標題 - 消失。只是刪除枚舉,並仍然發生在頭上的事情。 – Optimesh

+0

我編輯了代碼以刪除枚舉... tnx – Optimesh

回答

2

您排序的所有數據,包括頭,這意味着它仍然存在,但也許在你的結果輸出的某個地方的中間

這是你如何在一列排序CSV,保持頭:

import csv 
import operator 

with open('rawforsankey.csv', "rb") as sankey: 
    raw_reader = csv.reader(sankey) 
    header = next(raw_reader, None) 
    sorted_data = sorted(raw_reader, operator.itemgetter(0)) 

with open('newfiletest.csv', 'wb') as myfiletest: 
    wr = csv.writer(myfiletest, quoting=csv.QUOTE_ALL) 
    if header: 
     wr.writerow(header) 
    wr.writerows(sorted_data) 

只要記住,排序完成字典序所有列字符串。例如,109之前排序。例如,如果您的數據是數字,請使用更具體的排序鍵。

+0

tnx。你能解釋爲什麼我的代碼不工作,以及如何解決它? – Optimesh

+0

@Optimesh:我所做的唯一的*邏輯*更改是首先讀取頭('header = next(raw_reader,None)'取一行,然後首先寫入輸出文件)。 –

+0

@Optimesh:其餘的只是最佳做法;您可以使用'with'直接在CSV閱讀器對象上調用'sorted()'以確保文件對象自動關閉。 –