请教:如何筛选CSV中Path列含"A/B/C"的行并生成新CSV?
CSV筛选并写入新文件的Python实现方案
原代码的问题说明
- 你用
usecols=["Path"]只读取了Path列,后续无法保留原数据的整行内容 - 直接遍历
df得到的是列名而非每行的Path值,判断逻辑不成立
完整实现代码(基于pandas)
import pandas as pd def filter_and_write_csv(): # 读取完整CSV文件,不限制列 df = pd.read_csv("demo_file.csv") # 筛选Path列包含"A/B/C"的行,na=False避免空值报错 filtered_df = df[df["Path"].str.contains("A/B/C", na=False)] # 将筛选后的完整行写入新CSV,index=False去掉自动生成的行号 filtered_df.to_csv("filtered_demo_file.csv", index=False) # 执行函数 filter_and_write_csv()
关键步骤解释
- 读取完整数据:移除
usecols参数,确保保留所有列信息 - 高效筛选:利用pandas的
str.contains做模糊匹配,布尔索引直接过滤目标行 - 规范写入:
to_csv的index=False保证输出CSV格式与原文件一致
备选方案(原生Python实现,无需pandas)
import csv def filter_csv_with_csv_module(): with open("demo_file.csv", "r", newline="", encoding="utf-8") as infile, \ open("filtered_demo_file.csv", "w", newline="", encoding="utf-8") as outfile: reader = csv.DictReader(infile) writer = csv.DictWriter(outfile, fieldnames=reader.fieldnames) writer.writeheader() # 逐行判断并写入符合条件的行 for row in reader: if "A/B/C" in row["Path"]: writer.writerow(row) filter_csv_with_csv_module()
内容的提问来源于stack exchange,提问作者Anoosha
相关产品推荐
相关产品推荐

