批量转换文件夹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
相关产品推荐
相关产品推荐

