gpt4 book ai didi

python - 如何使用python通过浏览器下载数据框

转载 作者:行者123 更新时间:2023-12-05 03:40:47 27 4
gpt4 key购买 nike

我有一个函数,它在函数末尾生成一个数据框,我将其导出为 Excel 工作表。df.to_excel('response.xlsx')此 excel 文件保存在我的工作目录中。现在我将它作为 Web 应用程序托管在 heroku 上的 Streamlit 中,但我希望在调用此函数后将此 excel 文件下载到用户的本地磁盘(正常的浏览器下载)。有办法吗?

最佳答案

来自 streamlit 的 Snehan Kekre 在 this thread 中编写了以下解决方案.


streamlit as st
import pandas as pd
import io

import base64
import os
import json
import pickle
import uuid
import re


def download_button(object_to_download, download_filename, button_text, pickle_it=False):
"""
Generates a link to download the given object_to_download.
Params:
------
object_to_download: The object to be downloaded.
download_filename (str): filename and extension of file. e.g. mydata.csv,
some_txt_output.txt download_link_text (str): Text to display for download
link.
button_text (str): Text to display on download button (e.g. 'click here to download file')
pickle_it (bool): If True, pickle file.
Returns:
-------
(str): the anchor tag to download object_to_download
Examples:
--------
download_link(your_df, 'YOUR_DF.csv', 'Click to download data!')
download_link(your_str, 'YOUR_STRING.txt', 'Click to download text!')
"""
if pickle_it:
try:
object_to_download = pickle.dumps(object_to_download)
except pickle.PicklingError as e:
st.write(e)
return None

else:
if isinstance(object_to_download, bytes):
pass

elif isinstance(object_to_download, pd.DataFrame):
#object_to_download = object_to_download.to_csv(index=False)
towrite = io.BytesIO()
object_to_download = object_to_download.to_excel(towrite, encoding='utf-8', index=False, header=True)
towrite.seek(0)

# Try JSON encode for everything else
else:
object_to_download = json.dumps(object_to_download)

try:
# some strings <-> bytes conversions necessary here
b64 = base64.b64encode(object_to_download.encode()).decode()

except AttributeError as e:
b64 = base64.b64encode(towrite.read()).decode()

button_uuid = str(uuid.uuid4()).replace('-', '')
button_id = re.sub('\d+', '', button_uuid)

custom_css = f"""
<style>
#{button_id} {{
display: inline-flex;
align-items: center;
justify-content: center;
background-color: rgb(255, 255, 255);
color: rgb(38, 39, 48);
padding: .25rem .75rem;
position: relative;
text-decoration: none;
border-radius: 4px;
border-width: 1px;
border-style: solid;
border-color: rgb(230, 234, 241);
border-image: initial;
}}
#{button_id}:hover {{
border-color: rgb(246, 51, 102);
color: rgb(246, 51, 102);
}}
#{button_id}:active {{
box-shadow: none;
background-color: rgb(246, 51, 102);
color: white;
}}
</style> """

dl_link = custom_css + f'<a download="{download_filename}" id="{button_id}" href="data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,{b64}">{button_text}</a><br></br>'

return dl_link


vals= ['A','B','C']
df= pd.DataFrame(vals, columns=["Title"])

filename = 'my-dataframe.xlsx'
download_button_str = download_button(df, filename, f'Click here to download {filename}', pickle_it=False)
st.markdown(download_button_str, unsafe_allow_html=True)

我建议在该论坛上搜索主题。此代码似乎至少有 3-4 个替代方案。

enter image description here

关于python - 如何使用python通过浏览器下载数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68019358/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com