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

批量转换文件夹XLSX文件为CSV时出错,求排查解决

批量XLSX转CSV中途卡壳?试试这些排查方案

我之前批量处理几百个Excel文件时也碰到过这种“无声报错”的情况——前半段跑得好好的,后半段突然停住还没任何提示,大概率是个别文件有特殊问题,或是资源没释放导致的。咱们一步步来解决:

第一步:先给代码加异常捕获,揪出“捣蛋文件”

你现在的代码没做错误处理,一旦某个文件读取出问题,整个循环直接崩掉还没提示。先把代码改成这样,把错误信息和出问题的文件名打出来:

import glob
import pandas as pd

excel_files = glob.glob('/*xlsx*')
for idx, excel_file in enumerate(excel_files):
    try:
        print(f"正在处理第{idx+1}个文件:{excel_file}")
        df = pd.read_excel(excel_file, engine='openpyxl')  # 明确指定引擎,避免xlrd的XLSX支持问题
        output = excel_file.rsplit('.', 1)[0] + '.csv'  # 用rsplit避免文件名含多个点时截错
        df.to_csv(output, encoding='utf-8-sig', index=False)  # utf-8-sig适配Windows,避免乱码
        # 手动释放内存,防止处理上千个文件后内存溢出
        del df
    except Exception as e:
        print(f"处理文件{excel_file}时出错:{str(e)}")

这里几个小细节优化:

  • 用rsplit('.',1)代替split('.')[0],如果文件名里有多个点(比如project.v2.xlsx),不会把文件名截错
  • 指定engine='openpyxl',因为xlrd从2.0版本开始不再支持XLSX格式,之前能跑可能是环境里xlrd版本低,现在处理到某些文件触发了兼容问题
  • 用utf-8-sig比单纯utf-8更适配Windows系统,避免CSV用Excel打开时出现乱码
  • 循环里del df手动释放内存,处理上千个文件后内存不会越积越高

第二步:根据报错信息排查剩余文件的常见问题

捕获到错误后,大概率是以下几种情况:

  • 文件损坏/格式异常:有些XLSX可能是用WPS等非标准软件导出的,或是中途下载/保存时损坏,先手动打开这些文件看看能不能正常打开
  • 隐藏工作表/多工作表:默认read_excel只读第一个工作表,如果某个文件只有隐藏工作表,或者需要读特定工作表,得指定sheet_name参数,比如sheet_name=0(第一个表)或者sheet_name='数据汇总'
  • 文件名/路径含特殊字符:比如文件名里有中文、空格、*/?这类特殊符号,虽然glob能匹配到,但处理时可能出问题,建议先给这些文件重命名试试
  • 内存不足:处理上千个文件后,Python进程占用内存过高,系统自动终止了进程。除了del df,还可以在循环里加import gc; gc.collect()强制触发垃圾回收

第三步:如果还是卡,试试分批次处理

把文件列表分成小批次处理,比如每处理100个就重启一次脚本,避免内存持续占用:

import glob
import pandas as pd

excel_files = glob.glob('/*xlsx*')
batch_size = 100

for batch_start in range(0, len(excel_files), batch_size):
    batch_files = excel_files[batch_start:batch_start+batch_size]
    for excel_file in batch_files:
        try:
            df = pd.read_excel(excel_file, engine='openpyxl')
            output = excel_file.rsplit('.',1)[0]+'.csv'
            df.to_csv(output, encoding='utf-8-sig', index=False)
            del df
        except Exception as e:
            print(f"错误:{excel_file} - {str(e)}")

先加异常捕获找到具体出问题的文件,再针对性解决,应该就能搞定啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:37:12