重新格式化并转换xlsx为csv——xlrd.open_workbook替代方案
解决xlrd不支持xlsx文件的替代方案
xlrd从2.0版本开始不再支持xlsx格式,下面提供两种实用的替代方案,直接替换原代码即可:
方法一:用openpyxl替代xlrd(轻量适配原逻辑)
openpyxl是专门针对xlsx格式的处理库,完全兼容你的需求,先安装依赖:
pip install openpyxl
修改后的函数代码:
import openpyxl import csv def xls2csv(xlsfn, csvfn, xlsx2csv=None): """将xlsx文件转换为csv文件(读取第一个工作表)""" # 以只读模式加载xlsx文件,提升大文件处理效率 wb = openpyxl.load_workbook(xlsfn, read_only=True) # 获取第一个工作表(也可以用wb[wb.sheetnames[0]]明确指定) sh = wb.active with open(csvfn, 'w', newline="", encoding='utf-8') as f: c = csv.writer(f) # 直接遍历行并获取单元格值,和原逻辑完全对齐 for row in sh.iter_rows(values_only=True): c.writerow(row) wb.close()
方法二:用pandas快速实现(代码更简洁)
如果你的脚本允许引入pandas,这种方式代码量极少,处理大文件也更高效,先安装依赖:
pip install pandas openpyxl
修改后的函数代码:
import pandas as pd def xls2csv(xlsfn, csvfn, xlsx2csv=None): """将xlsx文件转换为csv文件(读取第一个工作表)""" # 读取xlsx第一个工作表,保存为csv(index=False避免写入多余索引列) df = pd.read_excel(xlsfn, sheet_name=0) df.to_csv(csvfn, index=False, encoding='utf-8')
额外提示
- 如果脚本需要同时处理
.xls和.xlsx文件,可以通过判断文件后缀,分别调用xlrd(处理xls)和openpyxl/pandas(处理xlsx) - 加上
encoding='utf-8'可以避免多数中文乱码问题,原代码未指定编码建议补上
内容的提问来源于stack exchange,提问作者jcbritton
相关产品推荐
相关产品推荐

