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

使用bash/xlsx2csv转XLS为CSV:本地正常线上报IndexError

解决xlsx2csv在生产服务器执行时出现IndexError的问题

问题背景

我写了一段bash脚本,用来批量把指定目录下的XLSX文件转成CSV格式,本地跑起来完全没问题,但放到生产服务器上执行时,直接抛出了IndexError: list index out of range的错误。

我的bash脚本代码如下:

#!/bin/bash
FILES=public/uploads/imports/*.xlsx
for f in $FILES
do
filename=$(basename "$f" .xlsx)
outext=".csv"
file="public/uploads/imports/"$filename$outext
echo "Processing $file file..."
xlsx2csv "$f" > "${file%.}"
done
mv public/uploads/imports/*.xlsx public/uploads/imports/processed
echo "Moved Files to Processed Folder"

报错信息如下:

Processing public/uploads/imports/fbb8099038b2f56269fe301e927e7685.csv file...
Traceback (most recent call last):
File "/usr/bin/xlsx2csv", line 5, in <module>
pkg_resources.run_script('xlsx2csv==0.7.6', 'xlsx2csv')
File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 540, in run_script
self.require(requires)[0].run_script(script_name, ns)
File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 1462, in run_script
exec_(script_code, namespace, namespace)
File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 41, in exec_
exec("""exec code in globs, locs""")
File "<string>", line 1, in <module>
File "/usr/lib/python2.7/site-packages/xlsx2csv-0.7.6-py2.7.egg/EGG-INFO/scripts/xlsx2csv", line 1124, in <module>
File "/usr/lib/python2.7/site-packages/xlsx2csv-0.7.6-py2.7.egg/EGG-INFO/scripts/xlsx2csv", line 198, in __init__
IndexError: list index out of range

可能的原因分析

这个错误大概率和以下几个因素有关:

  • 文件格式问题:生产服务器上的XLSX文件可能损坏、用了非标准格式(比如某些旧Excel版本生成的文件、带空白工作表);
  • 版本兼容性:本地和生产服务器的xlsx2csv版本不一致,你用的0.7.6是比较旧的版本,对新格式支持差;
  • Python环境差异:本地用的是Python3,而生产服务器还在维护停止的Python2.7,两者对文件解析的细节处理有区别。

解决方案

方案1:先排查单个文件是否有问题

先手动在生产服务器上转换报错的那个文件,确认是不是文件本身的问题:

xlsx2csv public/uploads/imports/fbb8099038b2f56269fe301e927e7685.xlsx test.csv

如果单个文件也报错,试试用Excel打开这个文件后重新保存为标准XLSX格式,或者删除里面的空白工作表再重试。

方案2:升级xlsx2csv版本

0.7.6版本太老了,对很多新格式支持不足,直接升级到最新版本:

# 生产环境是Python2.7的话用pip2
pip2 install --upgrade xlsx2csv
# 如果有Python3环境,优先用pip3安装
pip3 install --upgrade xlsx2csv

升级完成后再跑脚本,大概率能解决兼容性问题。

方案3:切换到Python3环境执行

Python2.7已经停止维护,xlsx2csv的新版本对Python3支持更好。如果生产服务器有Python3,修改脚本里的调用方式:

# 把原来的xlsx2csv "$f" > "${file%.}"改成下面这行
python3 -m xlsx2csv "$f" > "${file%.}"

方案4:给脚本加错误处理,避免批量执行中断

可以在脚本里加个判断,如果单个文件转换失败,就跳过它继续处理其他文件,不会因为一个坏文件导致整个脚本挂掉:

#!/bin/bash
FILES=public/uploads/imports/*.xlsx
for f in $FILES
do
filename=$(basename "$f" .xlsx)
outext=".csv"
file="public/uploads/imports/"$filename$outext
echo "Processing $file file..."
# 执行转换并检查返回值
xlsx2csv "$f" > "${file%.}"
if [ $? -ne 0 ]; then
    echo "Error processing $f, skipping..."
    continue
fi
done
mv public/uploads/imports/*.xlsx public/uploads/imports/processed
echo "Moved Files to Processed Folder"

总结

优先排查文件本身的问题,然后尝试升级xlsx2csv或者切换到Python3环境,再配合脚本的错误处理,基本就能解决生产环境的报错问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 17:28:12