首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态地将数据写入CSV,并使用快速api下载文件。

动态地将数据写入CSV,并使用快速api下载文件。
EN

Stack Overflow用户
提问于 2021-03-24 01:14:38
回答 1查看 1.7K关注 0票数 2

当我使用api下载文件时,我会收到损坏的数据:

代码语言:javascript
复制
file_name = 'download' 
prepared_df = pd.DataFrame.from_dict(data)
path_to_excel = os.path.join(dir_to_download, file_name)
writer = pd.ExcelWriter(path_to_excel, engine='xlsxwriter')
prepared_df.to_excel(writer, sheet_name="Sheet1", index=False)
writer.save()
writer.close()

使用FileResponse下载文件

代码语言:javascript
复制
FileResponse(path=path_to_excel, filename=file_name, media_type='text/xlsx')
EN

回答 1

Stack Overflow用户

发布于 2021-03-24 10:04:09

不需要在本地保存文件,您可以在StringIO/BytesIO的帮助下动态保存它。就我个人而言,我建议您在这种情况下使用CSV而不是XLSX格式,这样会工作得更快。

代码语言:javascript
复制
from io import BytesIO

import pandas as pd
import uvicorn
from fastapi import FastAPI
from fastapi.responses import StreamingResponse


app = FastAPI()


@app.get("/file", response_description='xlsx')
async def xlsx_file():
    frame = pd.read_excel("filename.xlsx")
    output = BytesIO()

    with pd.ExcelWriter(output) as writer:
        frame.to_excel(writer)

    headers = {
        'Content-Disposition': 'attachment; filename="example.xlsx"'
    }
    return StreamingResponse(iter([output.getvalue()]), headers=headers)


if __name__ == '__main__':
    uvicorn.run(app)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66773428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档