如何在 python 和 streamlit 中下载 excel 文件?
how to download excel file in python and streamlit?
我有一个 Python 脚本,可以读取文件并使用 Python 和 streamlit 将其转换为数据帧。然后我想创建一个函数,允许用户将此数据帧下载为扩展名为 .xls
.
的 Excel 文件
所以我尝试读取数据帧并使用这两个函数将其转换为 Excel 文件:
pd.ExcelWriter
df.to_excel
但是当我尝试使用 link 下载文件时,文件没有下载并显示此错误:
Failed-Network error
代码:
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)
第 5 行无法执行,因为您尚未将任何 excel 分配给 DataFrame df。
在你的代码中尝试这样的事情:
df = pd.read_csv('update2.xlsx')
希望对您有所帮助。
保重
def get_binary_file_downloader_html(bin_file, file_label='File'):
with open(bin_file, 'rb') as f:
data = f.read()
bin_str = base64.b64encode(data).decode()
href = f'<a href="data:application/octet-stream;base64,{bin_str}" download="{os.path.basename(bin_file)}">Descargar {file_label}</a>'
return href
st.markdown(get_binary_file_downloader_html('Wip_QRY.xlsx', 'Excel'), unsafe_allow_html=True)
使用 streamlit 最新版本(1.0.0 以上):
使用
st.download_button
显示下载按钮小部件。
当您希望为用户提供一种直接从您的应用程序下载文件的方式时,这很有用。
请注意,当用户连接时,要下载的数据存储在内存中,因此最好将文件大小控制在几百兆字节以内以节省内存。
这是来自 discussion 的示例代码,可以帮助下载 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')
我有一个 Python 脚本,可以读取文件并使用 Python 和 streamlit 将其转换为数据帧。然后我想创建一个函数,允许用户将此数据帧下载为扩展名为 .xls
.
所以我尝试读取数据帧并使用这两个函数将其转换为 Excel 文件:
pd.ExcelWriter
df.to_excel
但是当我尝试使用 link 下载文件时,文件没有下载并显示此错误:
Failed-Network error
代码:
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)
第 5 行无法执行,因为您尚未将任何 excel 分配给 DataFrame df。
在你的代码中尝试这样的事情:
df = pd.read_csv('update2.xlsx')
希望对您有所帮助。
保重
def get_binary_file_downloader_html(bin_file, file_label='File'):
with open(bin_file, 'rb') as f:
data = f.read()
bin_str = base64.b64encode(data).decode()
href = f'<a href="data:application/octet-stream;base64,{bin_str}" download="{os.path.basename(bin_file)}">Descargar {file_label}</a>'
return href
st.markdown(get_binary_file_downloader_html('Wip_QRY.xlsx', 'Excel'), unsafe_allow_html=True)
使用 streamlit 最新版本(1.0.0 以上):
使用
st.download_button
显示下载按钮小部件。
当您希望为用户提供一种直接从您的应用程序下载文件的方式时,这很有用。
请注意,当用户连接时,要下载的数据存储在内存中,因此最好将文件大小控制在几百兆字节以内以节省内存。
这是来自 discussion 的示例代码,可以帮助下载 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')