You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写代码记录触发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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 23:33:16