python:当一个标题为空时将选定的csv列复制到另一个csv文件

0 投票
1 回答
1541 浏览
提问于 2025-04-17 05:51

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

等等(所有行的元素数量都是一样的,即使有些是空的)。

在看了很多问题后,我从Python中以不同顺序写入CSV列这篇文章里借用了一些代码,来写出:

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初学者,所以任何提示都非常感谢。

1 个回答

1

在CSV格式中,第一个标题应该是一个空字符串(''),而不是一个空格(' '),这就是你在SelectedSignals中使用的内容。

你也可以在你的name2index字典中添加一个假的列名,比如说在name2index = ...之后加上name2index['header0'] = 0,然后在SelectedSignals中使用'header0'

另外,你还可以为字典设置一个默认值(当找不到你想要的标题时,它会使用这个默认值):在你的writeindices表达式中用name2index.get(name, 0)代替name2index[name]

撰写回答