如何将多个pandas DataFrame转xlsx后打包为单个zip压缩包
实现方案
你只需要把原来写入csv的逻辑替换为将DataFrame写入内存中的Excel二进制流,再将二进制流写入zip包即可,不需要生成本地临时Excel文件。
前置依赖
首先安装pandas写xlsx格式所需的依赖库:pip install openpyxl
完整实现代码
import zipfile import io import pandas as pd # 字典键调整为xlsx后缀 dfDict = {'df_1_name.xlsx': df1, 'df_2_name.xlsx': df2} def makeZip(self, path, dfDict): fileNames = dfDict.keys() if len(fileNames) > 0: with zipfile.ZipFile(path, 'w') as xlsx_zip: for file in fileNames: # 创建内存缓冲区存储Excel二进制内容 excel_buffer = io.BytesIO() # 将DataFrame写入内存缓冲区,指定xlsx格式引擎 with pd.ExcelWriter(excel_buffer, engine='openpyxl') as writer: dfDict[file].to_excel(writer, index=False, sheet_name='Sheet1') # 重置缓冲区指针到起始位置,读取完整内容写入zip excel_buffer.seek(0) xlsx_zip.writestr(file, excel_buffer.read(), zipfile.ZIP_DEFLATED) return
逻辑说明
- 保持了原函数的入参结构,可直接替换原有csv打包逻辑使用
- 用
io.BytesIO做内存中转,不会生成临时本地Excel文件 - 如果需要单个Excel文件内置多个工作表,只需调整
ExcelWriter对应的写入逻辑即可
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

