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

Python批量读取CSV合并DataFrame时,如何通过Try-Except捕获错误并跳过异常文件?

解决CSV合并时跳过出错文件的问题

你遇到的核心问题是:原来的列表推导式是表达式级别的写法,没法直接在里面加try-except语句块,得把单个CSV的读取逻辑封装成一个带异常处理的函数才行。

具体解决方案

首先,我们定义一个安全读取CSV的函数,遇到错误时打印提示并返回None,这样后续可以过滤掉无效的结果:

import pandas as pd
import os

def read_csv_safe(file_path):
    try:
        # 这里可以根据需要添加read_csv的其他参数,比如sep、header等
        return pd.read_csv(file_path)
    except Exception as e:
        # 打印错误信息方便排查哪个文件出了问题
        print(f"⚠️ 无法读取文件 {file_path}: {str(e)}")
        return None

然后,我们用这个函数来批量读取文件,过滤掉读取失败的结果,再合并:

export = "你的目标目录路径"

# 先过滤出目录下所有CSV文件(避免读取非CSV文件导致额外错误)
csv_files = [
    os.path.join(export, filename) 
    for filename in os.listdir(export) 
    if filename.lower().endswith('.csv')  # 用lower()兼容大小写不同的后缀,比如.CSV
]

# 读取所有有效CSV,过滤掉返回None的结果
valid_dataframes = [
    df for df in (read_csv_safe(file) for file in csv_files) 
    if df is not None
]

# 合并所有有效DataFrame
combined_csv = pd.concat(valid_dataframes, ignore_index=True)

为什么这个方案可行?

  1. 异常处理封装:把pd.read_csv放到函数里,用try-except捕获所有读取时的异常(包括你遇到的UnicodeDecodeError),出错时返回None而不是中断整个程序。
  2. 过滤非CSV文件:通过endswith('.csv')过滤文件,避免目录里的临时文件、二进制文件或其他格式文件触发不必要的错误。
  3. 高效过滤无效结果:用生成器表达式(read_csv_safe(file) for file in csv_files)读取文件,再用列表推导式过滤掉None,只保留有效DataFrame进行合并。

额外优化建议

如果想尝试兼容不同编码的文件(而不是直接跳过),可以在read_csv_safe里尝试多种编码:

def read_csv_safe(file_path):
    encodings = ['utf-8', 'latin-1', 'gbk']
    for encoding in encodings:
        try:
            return pd.read_csv(file_path, encoding=encoding)
        except UnicodeDecodeError:
            continue
    print(f"❌ 所有编码尝试失败,无法读取文件 {file_path}")
    return None

这样会先尝试UTF-8,不行再试Latin-1、GBK,实在不行才跳过,能减少不必要的文件跳过。

内容的提问来源于stack exchange,提问作者RCarmody

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 11:49:10