Python实现从CSV提取列值存入列表,匹配处理目标CSV行
解决CSV匹配删除行的问题
你的核心需求是先提取searchforthat.csv第0列的所有值,再过滤all.csv中第3列匹配这些值的行。下面是修正后的完整代码,每一步都有注释说明:
步骤1:读取目标匹配值
首先我们要把searchforthat.csv第0列的所有值读取出来,存在一个集合里(集合的查找速度比列表快,适合做存在性判断):
import csv # 存储要匹配的目标值 target_values = set() # 读取searchforthat.csv的第0列 with open('searchforthat.csv', 'r') as f: reader = csv.reader(f) # 跳过表头(如果你的CSV没有表头,直接删掉这一行) next(reader) for row in reader: # 把第0列的值加入集合 target_values.add(row[0])
步骤2:过滤all.csv并生成结果
接下来遍历all.csv,只保留第3列不在目标集合里的行:
# 处理all.csv,生成final.csv with open('all.csv', 'r') as inp, open('final.csv', 'w', newline='') as out: writer = csv.writer(out) reader = csv.reader(inp) # 保留表头(没有表头就删掉这一行) writer.writerow(next(reader)) for row in reader: # 判断第3列的值是否不在目标集合中,是的话就写入结果文件 if row[3] not in target_values: writer.writerow(row)
你原来代码的问题说明
*args = "searchforthat.csv[0]"写法完全错误,这只是赋值了一个字符串,根本没实际读取文件内容,无法拿到CSV里的列值- 代码缩进错误:
writer = csv.writer(out)和循环语句需要缩进,否则会触发语法报错 - 用
row[3] != args判断逻辑错误,args如果是列表/集合,不能直接用!=,应该用not in来判断元素是否不在集合内
额外注意事项
- 如果你的CSV文件没有表头,记得删掉代码里的
next(reader)和writer.writerow(next(reader))这两行 - 若出现文件乱码,可以在
open()里加上编码参数,比如open('searchforthat.csv', 'r', encoding='utf-8')
内容的提问来源于stack exchange,提问作者Bill Bronson
相关产品推荐
相关产品推荐

