排序时数据文件的头部消失
我有一个csv文件,里面有很多行数据。第一行是各列的标题。
我想根据某个参数(具体来说,就是第一列)来排序这些数据,但当然要把标题保留在原来的位置。
当我这样做的时候,标题完全消失了,输出文件里没有包含它。
有没有人能告诉我怎么保留标题,同时跳过它来排序其他的行呢?
(顺便说一下,第一列是数字和字母的混合)。
谢谢!
这是我的代码:
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))
但结果还是一样。
1 个回答
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)
只要记住,排序是按照字典顺序进行的,因为所有的列都是字符串。所以比如说,10
会排在 9
前面。如果你的数据是数字类型,建议使用更具体的排序方式。