Python读取CSV文件,并写入另一个跳过列

时间:2016-10-07 18:20:36

标签: python csv

我有包含18列的CSV输入文件 我需要使用输入中的所有列创建新的CSV文件,第4列和第5列除外

我的功能现在看起来像

def modify_csv_report(input_csv, output_csv):
    begin = 0
    end = 3

    with open(input_csv, "r") as file_in:
        with open(output_csv, "w") as file_out:
            writer = csv.writer(file_out)
            for row in csv.reader(file_in):
                writer.writerow(row[begin:end])
    return output_csv

所以它读取和写出0到3号列,但我不知道如何跳过第4,5列并从那里继续

3 个答案:

答案 0 :(得分:2)

您可以使用切片添加行的其他部分,就像您对第一部分所做的那样:

writer.writerow(row[:4] + row[6:])

请注意,要包含第3列,第一个切片的停止索引应为4.通常也不需要指定起始索引0.

更通用的方法是使用列表理解enumerate

exclude = (4, 5)
writer.writerow([r for i, r in enumerate(row) if i not in exclude])

答案 1 :(得分:2)

如果您的CSV具有有意义的标题,则可以使用$('#target').html2canvas({ onrendered: function (canvas) { var img = canvas.toDataURL("image/jpg"); } }); DictReader类来使用索引切片行的替代解决方案。

DictWriter

答案 2 :(得分:0)

这就是你想要的:

import csv


def remove_csv_columns(input_csv, output_csv, exclude_column_indices):
    with open(input_csv) as file_in, open(output_csv, 'w') as file_out:
        reader = csv.reader(file_in)
        writer = csv.writer(file_out)
        writer.writerows(
            [col for idx, col in enumerate(row)
             if idx not in exclude_column_indices]
            for row in reader)

remove_csv_columns('in.csv', 'out.csv', (3, 4))