python - 使用 python 替换和删除 csv 中的列

标签 python python-3.x csv

这是我正在编写的代码

import csv
import openpyxl

def read_file(fn):
    rows = []

    with open(fn) as f:
        reader = csv.reader(f, quotechar='"',delimiter=",")
        for row in reader:
            if row:                     
                rows.append(row)
    return rows 


replace = {x[0]:x[1:] for x in read_file("replace.csv")}


delete = set( (row[0] for row in read_file("delete.csv")) )  


result = []

input_file="input.csv"
with open(input_file) as f:
    reader = csv.reader(f, quotechar='"')
    for row in reader:
        if row:
            if row[7] in delete:
                continue                                   
            elif row[7] in replace:

                result.append(replace[row[7]])   
            else:
                result.append(row)                       



with open ("done.csv", "w+", newline="") as f:
    w = csv.writer(f,quotechar='"', delimiter= ",")
    w.writerows(result)

这是我的文件:

输入.csv:

c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13
"-","-","-","-","-","-","-","aaaaa","-","-","bbbbb","-",","
"-","-","-","-","-","-","-","ccccc","-","-","ddddd","-",","
"-","-","-","-","-","-","-","eeeee","-","-","fffff","-",","

这是一个 13 列的 csv。我只对第 8 和 11 字段感兴趣。

这是我的replace.csv:

"aaaaa","11111","22222"

删除.csv:

ccccc

所以我正在做的是将replace.csv的第一列(逐行)与input.csv的第8列进行比较,如果它们匹配,则将input.csv的第8列替换为replace.csv的第二列输入的第 11 列与 Replace.csv 的第 3 列 对于delete.csv,它会逐行比较两个文件,如果发现匹配,则会删除整行。 如果replace.csv 或delete.csv 中不存在任何行,则按原样打印该行。 所以我想要的输出是:

c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13
"-","-","-","-","-","-","-",11111,"-","-",22222,"-",","
"-","-","-","-","-","-","-","eeeee","-","-","fffff","-",","

但是当我运行这段代码时,它会给出如下输出:

c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13
11111,22222

我哪里出错了? 我正在尝试更改我之前发布的问题的程序。由于输入文件已更改,我正在尝试更改我的程序。 https://stackoverflow.com/a/54388144/9279313

最佳答案

@anuj 我认为 SafeDev 的解决方案是最佳的,但如果您不想使用 pandas,只需对代码进行少量更改即可。

for row in reader:
    if row:
        if row[7] in delete:
            continue                                   
        elif row[7] in replace:
            key = row[7]
            row[7] = replace[key][0]
            row[10]= replace[key][1]
            result.append(row)
        else:
            result.append(row)  

希望这能解决您的问题。

关于python - 使用 python 替换和删除 csv 中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54454290/

相关文章:

python - 如何在检查重复行标题和共同添加新数据时合并多个 csv 文件

python - 知道是否在对象上调用了 + 或 __add__

python - Aiohttp,异步 : RuntimeError: Event loop is closed

string - ConvertFrom-String和ghost属性

Python按键删除列表中的字典

Python 练习 : Calculates the minimum and maximum score for each student.

node.js - 如何在将 Json 转换为 CSV 时在 json2csv 库中提供自定义字段

python - 计算36个月内首付的储蓄百分比

Python 2.7 mediainfo --inform 输出完整信息而不是一个字符串

python - 如何python opencv大小增加和减少实时摄像头的窗口