Python批量提取文件夹内所有CSV第二行含表头保存为新CSV
需求说明
- 指定文件夹下共8000个CSV文件,所有文件第一行表头完全一致
- 需提取每个CSV文件的第二行整行数据,保留统一表头后汇总写入新CSV文件,新文件存储在原文件夹下
- 原有参考代码存在多处语法、逻辑错误,无法完成上述需求
原有代码问题梳理
- 语法错误:函数定义行
def load_data(filename)末尾缺失冒号;next()调用未传入迭代器对象,运行会直接报错 - 拼写错误:
csv.reder正确写法为csv.reader,参数delimeter正确写法为delimiter - 参数配置错误:常规CSV默认分隔符为逗号,原代码误将分隔符设置为下划线
_,无法正常解析CSV内容 - 逻辑错误:原代码会遍历单个文件的所有行、仅提取每行的第二个元素,不符合“仅取每个文件第二行整行”的要求
- 功能缺失:原代码未实现文件夹遍历、批量读取文件、结果写入新文件的逻辑,直接传入文件夹路径无法读取文件内容
可用实现代码
import os import csv # 替换为你的CSV文件夹实际路径 folder_path = r"替换为你的CSV文件夹路径" # 汇总后输出的文件名 output_filename = "merged_second_rows.csv" output_path = os.path.join(folder_path, output_filename) # 存储所有待提取的行 all_rows = [] header = None # 遍历文件夹下所有文件 for filename in os.listdir(folder_path): # 仅处理.csv后缀文件,跳过生成的汇总文件本身 if filename.lower().endswith(".csv") and filename != output_filename: file_path = os.path.join(folder_path, filename) with open(file_path, "r", encoding="utf-8-sig", newline="") as f: reader = csv.reader(f) # 读取表头,仅在第一个文件时保存 if header is None: header = next(reader) else: # 非第一个文件直接跳过表头 next(reader) # 读取第二行(数据第一行),存在则加入结果集 try: second_row = next(reader) all_rows.append(second_row) except StopIteration: # 跳过只有表头没有数据的空文件 print(f"警告:文件{filename}无有效数据行,已跳过") # 写入汇总结果 with open(output_path, "w", encoding="utf-8-sig", newline="") as f: writer = csv.writer(f) # 先写表头 writer.writerow(header) # 写入所有提取到的行 writer.writerows(all_rows) print(f"汇总完成,结果已保存至:{output_path}")
使用说明
- 运行前将代码中
folder_path变量的值替换为你存放CSV文件的文件夹实际路径 - 代码默认使用
utf-8-sig编码读写,可兼容Excel直接打开中文内容,如果你的CSV文件为GBK等其他编码,可自行修改代码中encoding参数值 - 代码会自动跳过最终生成的汇总文件,避免出现循环读取的问题
- 针对只有表头、没有数据行的异常CSV文件,代码会打印提示并自动跳过,不会中断运行
内容的提问来源于stack exchange,提问作者ankur .k
相关产品推荐
相关产品推荐

