Python过滤CSV后仅导出一行问题修复及CSV导出方案
修复CSV过滤后仅导出一行的问题
原代码的核心问题
- 每次匹配到
CRITICAL或URGENT时,就以w(覆盖)模式打开文件,导致之前写入的内容被清空,最终只保留最后一行匹配的数据 - 模块名大小写错误:Python中CSV模块是小写的
csv,不是大写CSV - 语法错误:关键字拼写错误(
ad→as)、变量名不一致(file和csv_file)、语句末尾缺少冒号、方法调用错误(csv_writerow应为writer.writerow) - 缩进不符合Python规范,导致代码逻辑混乱
修复后的代码
import csv # 先读取所有CSV数据 with open('testfilename.csv', 'r') as csv_file: csv_reader = csv.reader(csv_file) rows = list(csv_reader) filtered_critical = [] filtered_urgent = [] # 统一过滤所有数据 for row in rows: # 注意:若CSV含表头,需确认row[3]是状态列的正确索引(索引从0开始) if row[3] == "CRITICAL": filtered_critical.append(row) elif row[3] == "URGENT": filtered_urgent.append(row) # 一次性写入CRITICAL分类数据 with open('Critical.csv', 'w', newline='') as critical_file: writer = csv.writer(critical_file) writer.writerows(filtered_critical) # 一次性写入URGENT分类数据 with open('Urgent.csv', 'w', newline='') as urgent_file: writer = csv.writer(urgent_file) writer.writerows(filtered_urgent)
修复说明
- 先一次性读取全部CSV数据,再统一过滤,减少重复IO操作
- 收集完所有符合条件的数据后,再一次性写入目标文件,用
writerows可直接写入整个列表,无需逐行循环 - 修正了所有语法错误、大小写问题与缩进问题
- 若原CSV包含表头,需确认
row[3]对应状态列的正确索引
内容的提问来源于stack exchange,提问作者Mahesh Aknur
相关产品推荐
相关产品推荐

