Python 从带有索引的csv文件中删除列列表

Python 从带有索引的csv文件中删除列列表,python,list,csv,Python,List,Csv,我有一个CSV文件,内容如下: 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 1,10,19,,,,,,,,,,,,, 2,11,20,,,,,,,,,,,,, 3,12,21,,,,,,,,,,,,, 4,13,22,,,,,,,,,,,,, 5,14,23,,,,,,,,,,,,, 6,15,24,,,,,,,,,,,,, 7,16,25,,,,,,,,,,,,, 8,17,26,,,,,,,,,,,,, 9,18,27,,,,,,,,,,,,, 我需要按索引

我有一个CSV文件,内容如下:

0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
1,10,19,,,,,,,,,,,,,
2,11,20,,,,,,,,,,,,,
3,12,21,,,,,,,,,,,,,
4,13,22,,,,,,,,,,,,,
5,14,23,,,,,,,,,,,,,
6,15,24,,,,,,,,,,,,,
7,16,25,,,,,,,,,,,,,
8,17,26,,,,,,,,,,,,,
9,18,27,,,,,,,,,,,,,
我需要按索引删除一些列集

我尝试了下面的代码,它没有返回预期的结果,有人帮我做同样的事情

import csv

def read():
    with open("test.csv", "rb") as fp_in, open("newfile.csv", "wb") as fp_out:
        reader = csv.reader(fp_in, delimiter=",")
        writer = csv.writer(fp_out, delimiter=",")
        col_list = [0,1,2,3,4,5,6,8]
        for row in reader:
            for col_item in col_list:
                print(col_item)
                del row[int(col_item)]
            writer.writerow(row)
read()
返回的结果:

1,3,5,7,9,11,13,14
10,,,,,,,
11,,,,,,,
12,,,,,,,
13,,,,,,,
14,,,,,,,
15,,,,,,,
16,,,,,,,
17,,,,,,,
18,,,,,,,
问题是因为每次迭代阅读器都是相同的,所以我需要删除列表中的所有列

有人帮我做同样的事

所需的输出应如下所示:

7,9,10,11,12,13,14,15
,,,,,,,
,,,,,,,
,,,,,,,
,,,,,,,
,,,,,,,
.
.
.
.
with open("final_file.txt", 'a') as f:
    for k in data:
        f.write(k[7] + ',' + ','.join(k[9:]) + '\n')

确切地说,我只是想删除提到的列和it值

编辑:

一些明显的例子

def read():
    with open("test.csv", "rb") as fp_in, open("newfile.csv", "wb") as fp_out:
        reader = csv.reader(fp_in, delimiter=",")
        writer = csv.writer(fp_out, delimiter=",")
        col_list = [0,2]
        for row in reader:
            for col_item in col_list:
                print(col_item)
                del row[int(col_item)]
            writer.writerow(row)
read()
我得到的输出:

1,2,4
v,d,q
c,s,a
s,d,d
f,x,c
预期:

1,3,4
v,s,q
c,d,a
s,f,d
f,a,c

你可以这样做

假设您的输入文件名为input.txt

如果要将结果保存到名为final_file.txt的文件中,可以执行以下操作:

7,9,10,11,12,13,14,15
,,,,,,,
,,,,,,,
,,,,,,,
,,,,,,,
,,,,,,,
.
.
.
.
with open("final_file.txt", 'a') as f:
    for k in data:
        f.write(k[7] + ',' + ','.join(k[9:]) + '\n')
输出:

7,9,10,11,12,13,14,15
,,,,,,,
,,,,,,,
,,,,,,,
,,,,,,,
,,,,,,,
,,,,,,,
,,,,,,,
,,,,,,,
,,,,,,,

您可以尝试使用熊猫删除特定列,然后写入csv文件:

import pandas as pd
df = pd.read_csv('test.csv')
df = df.drop(['0','1','2','3','4','5','6','8'], axis=1)
df.to_csv('newfile.csv',index=False)
newfile.csv将是:

您也可以在库中使用


问题是您在col_列表的每次迭代中都要对行进行变异

def read():
    with open("test.csv", "r") as fp_in, open("newfile.csv", "w") as fp_out:
        reader = csv.reader(fp_in, delimiter=",")
        writer = csv.writer(fp_out, delimiter=",")
        col_list = [0,1,2,3,4,5,6,8]
        for row in reader:
            output = [v for (i,v) in enumerate(row) if i not in col_list]
            writer.writerow(output)
这应该行得通;使用列表理解来复制列列表中没有索引的行

def read():
    with open("test.csv", "r") as fp_in, open("newfile.csv", "w") as fp_out:
        reader = csv.reader(fp_in, delimiter=",")
        writer = csv.writer(fp_out, delimiter=",")
        col_list = [0,1,2,3,4,5,6,8]
        for row in reader:
            output = [v for (i,v) in enumerate(row) if i not in col_list]
            writer.writerow(output)
将以下内容写入newfile.csv:

7,9,10,11,12,13,14,15
,,,,,,,
,,,,,,,
,,,,,,,
,,,,,,,
,,,,,,,
,,,,,,,
,,,,,,,
,,,,,,,
,,,,,,,

显示所需的result@RomanPerekhrest谢谢,添加了期望的结果!只是为了确认-所以您想删除一些列,例如1、3、4、5,然后将一些行的第一个值(而不是全部)转置为列,例如10、12、15?这就是你想要达到的目的吗?@priboyd我只是想删除提及的列和值。我只是想删除提及的列而不是范围!我们能没有熊猫图书馆吗?!