如何在python和streamlit中下载excel文件?

Dev*_*022 2 python excel pandas pandas.excelwriter streamlit

我有一个 Python 脚本,它读取文件并使用 Python 和 Streamlit 将其转换为数据帧。然后我想创建一个函数,允许用户将此数据框下载为扩展名为 的 Excel 文件.xls

所以我尝试使用这两个函数读取数据框并将其转换为 Excel 文件:

pd.ExcelWriter
df.to_excel
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用链接下载文件时,文件不会下载并显示以下错误:

Failed-Network error
Run Code Online (Sandbox Code Playgroud)

代码:

import pandas as pd 
import streamlit as st

writer = pd.ExcelWriter('update2.xlsx')
df.to_excel(writer, index = False, header=True,encoding='utf-8')
with open(writer,'rb') as f:
    b64 = base64.b64encode(f.read())
    href = f'<a href="data:file/xls;base64,{b64}" download="new_file.{extension}">Download {extension}</a>'

st.write(href, unsafe_allow_html=True)
Run Code Online (Sandbox Code Playgroud)

Plu*_*ile 8

随着streamlit最新版本(1.0.0以上):

使用

st.download_button
Run Code Online (Sandbox Code Playgroud)

显示下载按钮小部件。

当您想为用户提供直接从您的应用程序下载文件的方法时,这非常有用。

请注意,当用户连接时,要下载的数据存储在内存中,因此最好将文件大小保持在几百兆字节以下以节省内存。

这是讨论中的示例代码,可以帮助下载 Excel 文件...

import pandas as pd
from io import BytesIO
from pyxlsb import open_workbook as open_xlsb
import streamlit as st

def to_excel(df):
    output = BytesIO()
    writer = pd.ExcelWriter(output, engine='xlsxwriter')
    df.to_excel(writer, index=False, sheet_name='Sheet1')
    workbook = writer.book
    worksheet = writer.sheets['Sheet1']
    format1 = workbook.add_format({'num_format': '0.00'}) 
    worksheet.set_column('A:A', None, format1)  
    writer.save()
    processed_data = output.getvalue()
    return processed_data
df_xlsx = to_excel(df)
st.download_button(label=' Download Current Result',
                                data=df_xlsx ,
                                file_name= 'df_test.xlsx')
Run Code Online (Sandbox Code Playgroud)