python:当一个标头为空时,将选定的csv列复制到其他csv文件

时间:2011-11-08 12:44:23

标签: python parsing csv string

我有一些大的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

etc(即使为空,所有行的元素数也相同)。

在阅读了各种问题后,我回收了一些代码 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

我是初学者,所以任何提示都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

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

您还可以在name2index dict之后添加假名列,例如name2index['header0'] = 0之后的name2index = ...,然后在'header0'中使用SelectedSignals。< / p>

或者,你可以使用dict的默认值(当它找不到你想要的标题时,它会使用这个默认值):name2index.get(name, 0)而不是你name2index[name] writeindices 1}}表达。