簡體   English   中英

如何在 Streamlit 中下載多個文件

[英]How to download more than one file in Streamlit

我需要為多個文件制作一個下載按鈕。 Streamlit 的下載按鈕不允許您下載多個文件。 我試着做幾個按鈕,但是當我點擊第一個按鈕時 rest 就消失了。 有什么方法可以在 Streamlit 中下載兩個或更多文件?

我從 Github 嘗試了這個解決方案,代碼如下所示:

if st.button("Rozpocznij proces"):
    raport2 = Raport.raport_naj_10(gender,year,week,engine)
    raportM = raport2[0]
    raportO = raport2[1]
    st.dataframe(raportM)
    st.dataframe(raportO)
    zipObj = ZipFile("sample.zip", "w")
    # Add multiple files to the zip
    zipObj.write("raportM")
    zipObj.write("raportO")
    # close the Zip File
    zipObj.close()

    ZipfileDotZip = "sample.zip"

    with open(ZipfileDotZip, "rb") as f:
        bytes = f.read()
        b64 = base64.b64encode(bytes).decode()
        href = f"<a href=\"data:file/zip;base64,{b64}\" download='{ZipfileDotZip}.zip'>\
            Click last model weights\
        </a>"
    st.sidebar.markdown(href, unsafe_allow_html=True)

但我得到這個錯誤:

FileNotFoundError: [WinError 2] Nie można odnaleźć określonego pliku: 'raportM'

它說找不到名為“raportM”的文件。

您遇到這些錯誤是因為代碼是在假設您已經存儲了文件並且您希望為它們生成 zip 文件的情況下編寫的。 zipObj.write("raportM")正在尋找名為“raportM”的文件,但沒有,因為在您的情況下,您沒有存儲這些文件。 我可以看到您將變量名作為文件傳遞,但這是行不通的。

在執行上述操作之前,您需要做的是在本地機器中保存這些變量名 CSV 文件。

在這種情況下,讓我們修改您的代碼。 但在此之前,我們需要為按鈕st.button("Rozpocznij proces")初始化 session state 因為流光按鈕沒有回調

processbtn = st.button("Rozpocznij proces")
# Initialized session states
if "processbtn_state" not in st.session_state:
    st.session_state.processbtn_state = False

if processbtn or st.session_state.processbtn_state:
    st.session_state.processbtn_state = True

    raport2 = Raport.raport_naj_10(gender,year,week,engine)
    raportM = raport2[0]
    raportO = raport2[1]
    st.dataframe(raportM)
    st.dataframe(raportO)

    # Save files
    raportM.to_csv('raportM.csv') # You can specify a directory where you want
    raportO.to_csv('raportO.csv') # these files to be stored

    # Create a zip folder
    zipObj = ZipFile("sample.zip", "w")

    # Add multiple files to the zip
    zipObj.write("raportM.csv")
    zipObj.write("raportO.csv")
    # close the Zip File
    zipObj.close()

    ZipfileDotZip = "sample.zip"

    with open(ZipfileDotZip, "rb") as f:
        bytes = f.read()
        b64 = base64.b64encode(bytes).decode()
        href = f"<a href=\"data:file/zip;base64,{b64}\" download='{ZipfileDotZip}.zip'>\
            Click last model weights\
        </a>"
    st.sidebar.markdown(href, unsafe_allow_html=True)

此時,當您密切注意您的目錄時,您會發現'raportM.csv''raportO.csv'文件。 您可以將條件傳遞給下載按鈕,以便在下載時刪除文件,以防您不想保留它們。

注意:您可能會遇到fileNotFound 錯誤,但這並不意味着它不起作用,您只需要知道保存文件的位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM