2014-04-13 44 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()'以确保文件对象自动关闭。 –