【问题标题】:Header of data file disappears when sorting排序时数据文件头消失
【发布时间】:2014-05-27 06:22:54
【问题描述】:

我有一个包含多行数据的 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))

但得到了相同的结果

【问题讨论】:

  • 我猜是之前的一些测试留下的...
  • 好吧,我得到的输出在第一列中没有 1,2,3....,并且第一行 - 标题 - 消失了。刚刚删除了枚举,标题仍然发生同样的事情。
  • 我编辑了代码以删除枚举... tnx

标签: python sorting python-2.7 csv


【解决方案1】:

您对所有数据(包括标题)进行了排序,这意味着它仍然存在,但可能在结果输出的中间某处。

这就是您如何在一列上对 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 之前。例如,如果您的数据是数字,请使用更具体的排序键。

【讨论】:

  • tnx.你能解释一下为什么我的代码不起作用以及如何解决它吗?
  • @Optimesh:我所做的唯一逻辑更改是先读取标题(header = next(raw_reader, None) 占用一行,然后先写入输出文件)。
  • @Optimesh:剩下的只是最佳实践;您可以直接在 CSV 读取器对象上调用 sorted(),使用 with 确保文件对象自动关闭。
  • 那么我得到的输出很奇怪,不是吗?如果你想保留原来的创建一个排序的版本,你会怎么做?感谢您的帮助 Martijn
  • 始终重新运行您在问题中发布的代码,看看您是否仍然有正确的理解。 :-) 尤其是当您进行了几次试验时,您无法再确定您的输出是由您发布的内容产生的。
猜你喜欢
  • 1970-01-01
  • 2021-09-21
  • 2015-06-21
  • 2016-04-26
  • 2021-05-08
  • 2016-11-30
  • 1970-01-01
  • 2011-04-16
  • 1970-01-01
相关资源
最近更新 更多