如何编写代码记录触发ParserError的CSV文件并继续执行?
CSV文件批量处理:异常捕获与错误记录实现
问题背景
处理批量CSV文件时,部分文件因导出异常缺失表格,执行读取逻辑会触发ParserError: Passed header=n, found only n lines in file错误,需要捕获该错误、记录出错文件名,并让代码继续处理其他文件。
解决方案
通过Python的异常捕获机制,结合文件操作实现错误记录,同时保证批量处理流程不中断。以下是完整实现代码:
import pandas as pd import os # 配置参数 ERROR_LOG_PATH = "error_files.txt" # 错误日志保存路径 TARGET_CSV_DIR = "./csv_files" # 待处理CSV文件所在目录,替换为你的实际路径 # 遍历目录下所有CSV文件 for file_name in os.listdir(TARGET_CSV_DIR): # 仅处理CSV格式文件 if not file_name.lower().endswith(".csv"): continue file_full_path = os.path.join(TARGET_CSV_DIR, file_name) output_file_path = os.path.join(TARGET_CSV_DIR, f"{os.path.splitext(file_name)[0]}_output.csv") try: # 读取各表格段(修正原代码语法错误) df1 = pd.read_csv(file_full_path, sep='\t', encoding='utf-16', header=0, nrows=1, usecols=[1,2,3]) df1.columns = 'TABLE1_' + df1.columns df2 = pd.read_csv(file_full_path, sep='\t', encoding='utf-16', header=2, nrows=1, usecols=[1,2,3]) df2.columns = 'TABLE2_' + df2.columns df3 = pd.read_csv(file_full_path, sep='\t', encoding='utf-16', header=4, nrows=1, usecols=[1,2,3]) df3.columns = 'TABLE3_' + df3.columns df4 = pd.read_csv(file_full_path, sep='\t', encoding='utf-16', header=6, nrows=1, usecols=[1,2,3]) df4.columns = 'TABLE4_' + df4.columns # 合并数据并导出 combined_df = df1.join([df2, df3, df4]) combined_df.to_csv(output_file_path, sep=',', encoding='utf-8', header=True, index=False) print(f"已完成:{file_name}") except pd.errors.ParserError as err: # 捕获目标错误,记录到日志文件 with open(ERROR_LOG_PATH, 'a', encoding='utf-8') as log_file: log_file.write(f"{file_name}: {str(err)}\n") print(f"处理失败:{file_name}(缺失表格),已记录到错误日志") continue # 跳过当前文件,继续处理下一个 except Exception as err: # 捕获其他未知错误,统一记录 with open(ERROR_LOG_PATH, 'a', encoding='utf-8') as log_file: log_file.write(f"{file_name}: 未知错误 - {str(err)}\n") print(f"处理失败:{file_name}(未知错误),已记录到错误日志") continue
关键说明
- 异常捕获:用
try-except包裹核心处理逻辑,精准捕获pd.errors.ParserError,同时兜底捕获其他意外错误 - 错误日志:使用追加模式(
'a')写入日志,避免覆盖历史记录,每条记录包含文件名和错误详情 - 批量处理:遍历目标目录,自动过滤非CSV文件,无需手动逐个处理
- 语法修正:修复了原代码中
usecols缺少等号、中文引号的语法问题
内容的提问来源于stack exchange,提问作者Veritas
相关产品推荐
相关产品推荐

