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

如何在Streamlit中实现多CSV文件的下载?

问题解答

1. 部署到服务器后的zip文件生成情况

部署到服务器后,my_test.zip会生成,生成位置是服务器上Streamlit应用的工作目录(即运行你的.py脚本的目录):

  • 若用Streamlit Cloud部署,文件会出现在你的应用仓库根目录;
  • 若用VPS、EC2这类自主部署的服务器,文件会存放在你启动Streamlit命令时所在的目录。
    需要注意,这种方式会留下残留文件,多用户同时操作时还可能出现文件覆盖、权限冲突的问题。

2. 无需生成本地zip文件的实现方法

可以借助Python的io.BytesIO在内存中创建zip文件,直接把内存中的字节流传给st.download_button,全程无需写入磁盘。代码示例如下:

import io
import zipfile
import pandas as pd
import streamlit as st

# 假设data1、data2是你的目标DataFrame
data1 = pd.DataFrame({"col1": [1,2,3], "col2": ["a","b","c"]})
data2 = pd.DataFrame({"col3": [4,5,6], "col4": ["d","e","f"]})

# 在内存中创建zip缓冲区
zip_buffer = io.BytesIO()
with zipfile.ZipFile(zip_buffer, "w", zipfile.ZIP_DEFLATED) as zip_file:
    # 将DataFrame转为CSV字符串并写入zip
    zip_file.writestr("data1.csv", data1.to_csv(index=False))
    zip_file.writestr("data2.csv", data2.to_csv(index=False))

# 重置缓冲区指针到起始位置
zip_buffer.seek(0)

# 生成下载按钮
st.download_button(
    label="Download ZIP",
    data=zip_buffer,
    file_name="mydownload.zip",
    mime="application/zip"
)

这种方式所有操作都在内存中完成,不会产生任何本地或服务器残留文件,也能避免多用户场景下的文件冲突问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 11:02:20