Python大体积xlsx文件快速转csv方案求助,现有方案效率过低
XLSX大文件高效转CSV优化方案
你当前使用的pandas+openpyxl、原生openpyxl默认配置慢的核心原因是两类实现都是纯Python开发,默认会把整个文件全量加载到内存解析单元格结构,大文件下内存和CPU开销极高。以下是可直接落地的提速方案:
- 方案1:修改openpyxl为只读流式加载,无需更换依赖
原有openpyxl使用默认加载模式,全量读取文件内容到内存,改为只读模式后流式逐行解析,内存占用降低90%以上,速度提升3-5倍,代码示例:
import openpyxl import csv import os # read_only=True为核心优化参数 wb = openpyxl.load_workbook(file, read_only=True, data_only=True) sh = wb.active with open(os.path.join(path, filename), 'w', newline="", encoding='utf-8') as f: c = csv.writer(f) # values_only=True直接返回单元格值,省略单元格对象构造开销 for r in sh.iter_rows(values_only=True): c.writerow(r) wb.close()
该方案60M规格的常规xlsx文件转换时间可压缩到1分钟以内。
- 方案2:使用Rust实现的
calamine解析引擎,纯Python生态内性能最优
calamine是Rust开发的高性能表格解析库,Python绑定版本可直接作为pandas的读取引擎使用,解析速度比openpyxl快5-10倍,首先安装依赖:pip install python-calamine
转换代码示例:
import pandas as pd import os read_file = pd.read_excel(os.path.join(path, old_filename), engine="calamine") read_file.to_csv(os.path.join(path, new_filename), index=None, header=True, encoding='utf-8')
该方案60M规格的常规xlsx文件转换时间普遍在10-30秒区间。
- 方案3:调用LibreOffice命令行转换,性能接近原生工具极限
如果运行环境允许安装LibreOffice,直接调用其静默命令行转换是成本最低、性能最高的方案,底层为C++实现的解析逻辑,无需维护转换代码,命令示例:
# Windows环境执行 "C:\Program Files\LibreOffice\program\soffice.exe" --headless --convert-to csv --outdir 输出目录路径 输入xlsx文件路径 # Linux/macOS环境执行 libreoffice --headless --convert-to csv --outdir 输出目录路径 输入xlsx文件路径
该方案60M规格的常规xlsx文件转换时间普遍在10秒以内,可通过额外参数指定转换的工作表、编码格式等配置。
如果仅需要转换xlsx内的指定工作表,可在上述所有方案中添加对应参数指定目标工作表,不需要解析全量工作表内容,可再获得10%-30%的速度提升。
内容的提问来源于stack exchange,提问作者JohnDole
相关产品推荐
相关产品推荐

