【问题标题】:python: copy selected csv columns to other csv file when one header is emptypython:当一个标题为空时,将选定的csv列复制到其他csv文件
【发布时间】:2011-11-08 12:44:22
【问题描述】:

我有一些大的 csv 文件,有大约 200 个标题名称(第一个是空的)。 我想获取一些选定的列并将它们复制到一个新的 output.csv 文件中。我的问题是抓住没有名字的标题! (标题中的第一个元素为空)

所以 input.csv 看起来像,

            ,header1,header2,header3,header4, ... , header200
            value0, value2, value2, value3, value4, ..., value200
            ,2,3,30,,, ... , 10
            66,2,3,30,, ... , 10

等(所有行都具有相同数量的元素,即使为空)。

在阅读了各种问题后,我回收了一些代码 write CSV columns out in a different order in Python

写作,

import csv
from operator import itemgetter         

SelectedSignals = ['header1',  'header4'] 



fiin=open('input.csv','rb') #open to read "r" in binary mode "b"
fiout=open('output.csv','wb') #open to write "w" in binary mode "b"

reader = csv.reader(fiin, delimiter=',')
writer = csv.writer(fiout, delimiter=',')

AllSignalNames = reader.next()
name2index = dict((name, index) for index, name in enumerate(AllSignalNames))
writeindices = [name2index[name] for name in SelectedSignals]
reorderfunc = itemgetter(*writeindices) # itemgetter was imported from operator module
writer.writerow(SelectedSignals)

for row in reader:
    writer.writerow(reorderfunc(row))

这给出了所需的输出, 说,

            ,header1,header4
            value0, value4
            ,30
            66,30

但问题正在发生,

  SelectedSignals = [' ', 'header1',  'header4'] 

抓取第一列。返回 KeyError

我是 python 初学者,所以任何提示都表示赞赏。

【问题讨论】:

    标签: python parsing csv string


    【解决方案1】:

    在 CSV 格式中,第一个标头应该是长度为零的字符串 (''),而不是空格 (' '),这是您在 SelectedSignals 中使用的。

    您还可以在 name2index 字典中添加一个假列名,例如 name2index['header0'] = 0name2index = ... 之后,然后在 SelectedSignals 中使用 'header0'

    或者,您可以为 dict 使用默认值(当它找不到您想要的标题时,它将使用此默认值):name2index.get(name, 0) 而不是 name2index[name] 在您的 writeindices 表达式中。

    【讨论】:

      猜你喜欢
      • 2013-09-07
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      • 2016-06-07
      • 2018-11-29
      • 1970-01-01
      相关资源
      最近更新 更多