我怎么能删除某些列然后将想要的列写入csv python

时间:2015-02-07 20:40:12

标签: python csv

我有一个.csv文件,我想删除某些我不需要的列。 例如,

   ID,Name,Nickname,Income,Car,  ..............
    1,A,test,12k,Benz, ..............
    2,B,test1,23k,Audi, ..............
    3,C,test2,20k,BMW,  ..............

但是,我不需要他们的昵称和汽车品牌信息。 因此,我有另一个.csv文件列出我不需要的列信息。

Remove_list,
Nickname,
Car,
.
.
.
.
.

最后,我想获得一个新的.csv输出文件,如下所示。

ID,Name,Income, ......
1,A,12k,   ......
2,B,23k,   .......
3,C,20k,   ........ 

有谁知道如何实现这一目标?我只知道如何通过行方向而不是列来处理它。

而且我发现有人用c#完成了这个,但我只在python上工作。 (参见c#示例,How do I delete certain column from .csv file

非常感谢您的帮助,

2 个答案:

答案 0 :(得分:0)

您可以使用del语句删除列表中的值。 假设您在" csv_table"中有csv数据。变量,以及"列中要删除的标题列表"变量,你可以做这样的事情:

columns_indexes = sorted([index for index,column in enumerate(csv_table[0]) 
if column in columns],reverse=True)
for line in csv_table:
    for index in columns_indexes:
        del line[index]

csv_table变量现在将反映您想要的列表。您可以使用csv模块轻松读取csv文件。

答案 1 :(得分:0)

假设csv文件orig.csv

ID,Name,Nickname,Income,Car
1,A,test,12k,Benz
2,B,test1,23k,Audi
3,C,test2,20k,BMW

remove_list.csv

Nickname
Car

我们可以做这样的事情来过滤:

def remove_cols():
    remove_list = []

    with open('remove_list.csv') as f:
        for line in f:
            remove_list.append(line.strip())

    colIndexesToKeep = []

    with open('orig.csv') as origFile:
        with open('filtered.csv', 'w') as filteredFile:
            for line in origFile:
                if not colIndexesToKeep:
                    for ix, name in enumerate(line.split(',')):
                        if name.strip() not in remove_list:
                            colIndexesToKeep.append(ix)

                filteredLine = [val.strip() for ix, val in 
                  enumerate(line.split(',')) if ix in colIndexesToKeep]
                filteredFile.write(','.join(filteredLine))     
                filteredFile.write('\n')           

,它给出了输出filtered.csv

ID,Name,Income
1,A,12k
2,B,23k
3,C,20k