我有一个包含数据行的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 :(得分: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
之前排序。例如,如果您的数据是数字,请使用更具体的排序键。