![](/img/trans.png)
[英]Streamlit download button not working when trying to download files as zip
[英]Download multiple files in streamlit
我正在编写一个程序来连接和修改一些 CSV 文件。 我的代码向我返回 5 个或更少的 DataFrame。 我想允许用户将所有这些 DataFrames 下载为 CSV 文件,但st.download_button
只允许我下载一个。 我尝试只制作几个按钮,但是当我单击第一个 rest 时,它就消失了。 这是我的代码:
uploaded_files = st.file_uploader("Proszę wybrać pliki csv", accept_multiple_files=True)
if st.button("Rozpocznij proces"):
data1 = structure.create_structure(uploaded_files)
@st.cache
def convert_df(df):
# IMPORTANT: Cache the conversion to prevent computation on every rerun
return df.to_csv().encode('utf-8')
mlode = convert_df(data1[0])
lochy = convert_df(data1[1])
knury = convert_df(data1[2])
rozplodowa = convert_df(data1[3])
mag = convert_df(data1[4])
#choices = st.multiselect("Download",["mlode","lochy","knury","rozplodowa"])
razem = ['mlode','lochy','knury','rozplodowa','mag']
st.download_button(label="Download mlode as CSV",
data = mlode,
file_name="mlode.csv")
st.download_button(label="Download lochy as CSV",
data=lochy,
file_name="lochy.csv")
st.download_button(label="Download lochy as CSV",
data=knury,
file_name="knury.csv")
st.download_button(label="Download lochy as CSV",
data=rozplodowa,
file_name="rozplodowa.csv")
st.download_button(label="Download lochy as CSV",
data=mag,
file_name="mag.csv")
有没有办法使用st.download_button
下载多个文件?
一个下载按钮 afaik 无法做到这一点。 一种解决方法是 zip 选择文件并使用 zip 文件进行下载。
这不是download button
,问题出在if st.button("Rozpocznij proces"):
Streamlit 按钮没有回调,因此st.button()
下的任何用户条目将始终重新运行应用程序,因此您最终会丢失数据,在这种情况下,您可以替换if st.button("Rozpocznij proces"):
与复选框类似if st.checkbox("Rozpocznij proces"):
你可以使用 go。
改变
if st.button("Rozpocznij proces"):
至
if st.checkbox("Rozpocznij proces"):
我还建议您创建一个 function 以及您的下载按钮,这将使您的工作更好,而不是一遍又一遍地重复几乎相同的代码。
但在我们这样做之前,让我们先重命名这些变量,以便我们在输入 function arguments 时有一个清晰的了解。
mlode_csv = convert_df(data1[0]) # I added csv to the variable names
lochy_csv = convert_df(data1[1])
knury_csv = convert_df(data1[2])
rozplodowa_csv = convert_df(data1[3])
mag_csv = convert_df(data1[4])
现在让我们构建我们的download_button
function。
import streamlit as st
import csv
def generate_download_button(csv_data, filename, file_label):
st.download_button(label=f"Download {file_label} as CSV",
data=csv_data,
file_name=f"{filename}.csv")
generate_download_button(csv_data=mlode_csv, filename="mlode", file_label="mlode")
generate_download_button(csv_data=lochy_csv, filename="lochy", file_label="lochy")
generate_download_button(csv_data=knury_csv, filename="knury", file_label="knury")
generate_download_button(csv_data=rozplodowa_csv, filename="rozplodowa", file_label="rozplodowa")
generate_download_button(csv_data=mag_csv, filename="mag", file_label="mag")
每当您调用generate_download_button
时,它都会生成一个新的下载按钮。
由于st.download_button
(还)不允许下载多个文件,您可以尝试 zip 您的所有数据帧/csv,以便用户一次下载它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.