排序时数据文件的头部消失

0 投票
1 回答
1526 浏览
提问于 2025-04-18 02:34

我有一个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 前面。如果你的数据是数字类型,建议使用更具体的排序方式。

撰写回答