如何用Python从多个同格式CSV中提取含指定字符串的行至目标CSV
使用Python csv库批量提取匹配行并合并到新CSV
针对你需要从多个同格式CSV中搜索指定字符串、提取对应行合并到一个输出文件的需求,用Python的csv库就能轻松实现,以下是具体方案:
核心思路
- 遍历所有目标输入CSV文件
- 用
csv.DictReader按列名读取内容,方便直接通过列名判断匹配 - 检查每行指定列的值是否等于目标字符串,匹配则写入输出文件
- 确保输出文件只写入一次表头,避免重复
完整代码实现
import csv import os # 自定义配置 TARGET_STR = "Bob" SEARCH_COL = "First Name" # 可以是具体文件列表,也可以遍历文件夹下所有CSV INPUT_CSVs = ["file1.csv", "file2.csv"] OUTPUT_CSV = "out.csv" has_written_header = False # 以追加模式打开输出文件 with open(OUTPUT_CSV, "a", newline="", encoding="utf-8") as out_f: writer = None for csv_file in INPUT_CSVs: with open(csv_file, "r", newline="", encoding="utf-8") as in_f: reader = csv.DictReader(in_f) # 首次执行时初始化writer并写入表头 if not has_written_header: writer = csv.DictWriter(out_f, fieldnames=reader.fieldnames) writer.writeheader() has_written_header = True # 逐行检查,匹配则写入 for row in reader: if row[SEARCH_COL] == TARGET_STR: writer.writerow(row) # 如果要批量处理文件夹下所有CSV(排除输出文件),替换INPUT_CSVs为: # INPUT_CSVs = [f for f in os.listdir("./") if f.endswith(".csv") and f != OUTPUT_CSV]
关键细节说明
newline="":避免在Windows系统下写入CSV时出现多余空行encoding="utf-8":保证文件编码兼容,避免乱码csv.DictReader/DictWriter:通过列名操作数据,比按索引更直观,适配列顺序变化的情况- 追加模式
"a":每次写入都会把内容加到输出文件末尾,适合批量处理多个文件 has_written_header标记:确保输出文件只保留一份表头,符合CSV规范
内容的提问来源于stack exchange,提问作者Pasquale Martorano
相关产品推荐
相关产品推荐

