如何使用Python的csv模块按指定列值筛选CSV行并写入新文件
使用Python csv模块实现CSV文件筛选导出
方法一:使用csv.DictReader(推荐,通过表头名取值)
这种方式直接通过列名获取数据,无需关心列的索引位置,代码可读性更强:
import csv # 同时打开输入和输出文件,with语句自动管理文件的打开与关闭 with open('infile.csv', 'r', newline='') as infile, open('outfile.csv', 'w', newline='') as outfile: # 创建字典读取器,自动识别原文件表头 csv_reader = csv.DictReader(infile) # 创建CSV写入器 csv_writer = csv.writer(outfile) # 写入新文件的自定义表头 csv_writer.writerow(['points', 'rank']) # 遍历每一行数据 for row in csv_reader: # 判断筛选条件:role为student且status为good if row['role'] == 'student' and row['status'] == 'good': # 提取score和result列,写入输出文件 csv_writer.writerow([row['score'], row['result']])
方法二:使用csv.reader(按列索引取值)
如果习惯按列索引操作,可以用这个版本,注意列索引从0开始计数:
import csv with open('infile.csv', 'r', newline='') as infile, open('outfile.csv', 'w', newline='') as outfile: csv_reader = csv.reader(infile) csv_writer = csv.writer(outfile) # 跳过原文件的表头行,避免表头被当作数据处理 next(csv_reader) # 写入新文件的自定义表头 csv_writer.writerow(['points', 'rank']) for row in csv_reader: # 第0列是role,第1列是status if row[0] == 'student' and row[1] == 'good': # 提取第2列(score)和第3列(result) csv_writer.writerow([row[2], row[3]])
常见失败原因提示
你之前尝试出错可能是以下原因:
- 未跳过原文件的表头行,导致表头被当作数据行参与条件判断
- 列索引计数错误(比如把score当成第3列,实际索引从0开始是第2列)
- 打开文件时未添加
newline=''参数,导致输出文件出现多余空行 - 条件判断的字符串匹配出错(比如存在大小写不一致、多余空格等情况)
内容的提问来源于stack exchange,提问作者user20977195
相关产品推荐
相关产品推荐

