如何用Python脚本基于邮件列表过滤CSV文件指定列
Python实现CSV邮件匹配过滤脚本
实现思路
- 读取待匹配的邮件列表文件,将邮件地址存入集合(集合查找效率远高于列表,适合大规模数据场景)
- 读取原始CSV文件,逐行检查每条记录的
e-mail字段是否在邮件集合中 - 将符合条件的记录(包括表头)写入新的CSV文件
完整脚本代码
import csv # 配置文件路径,根据实际情况修改 INPUT_CSV = "original_data.csv" EMAIL_LIST_FILE = "email_list.txt" OUTPUT_CSV = "filtered_data.csv" def filter_csv_by_emails(): # 读取邮件列表到集合 email_set = set() with open(EMAIL_LIST_FILE, 'r', encoding='utf-8') as f: for line in f: # 去除换行符和首尾空格,避免匹配错误 email = line.strip() if email: # 跳过空行 email_set.add(email) # 读取原始CSV并过滤写入新文件 with open(INPUT_CSV, 'r', encoding='utf-8') as infile, \ open(OUTPUT_CSV, 'w', encoding='utf-8', newline='') as outfile: reader = csv.DictReader(infile) writer = csv.DictWriter(outfile, fieldnames=reader.fieldnames) # 写入表头 writer.writeheader() # 遍历每条记录,匹配则写入 for row in reader: if row['e-mail'] in email_set: writer.writerow(row) if __name__ == "__main__": filter_csv_by_emails() print("过滤完成,结果已保存到", OUTPUT_CSV)
关键细节说明
- 使用
csv.DictReader和csv.DictWriter可直接通过字段名(如row['e-mail'])访问列数据,无需关心列位置,代码更易维护 - 邮件列表文件支持TXT或单列CSV(代码按行读取,自动忽略空行)
- 加入
strip()处理邮件地址,避免因换行符、空格导致的匹配失败 - 设置
newline=''可避免Windows系统下写入CSV时出现多余空行
测试示例
将你提供的示例数据分别保存为:
original_data.csv(原始完整CSV内容)email_list.txt(待匹配邮件列表)
运行脚本后,filtered_data.csv会生成期望的结果:
name,e-mail,status Mary,mary_mail,2 Louis,louis_mail,2 Frank,frank_mail,2
内容的提问来源于stack exchange,提问作者juliuz
相关产品推荐
相关产品推荐

