如何使用Flask即时下载excel

时间:2017-01-25 07:41:57

标签: python pandas flask excel-2010 python-3.5

我正在使用Python 3.以下是设置文件下载响应的部分 -

import io
import pandas as pd
@app.route('/download_log',methods=['GET'])
def download_log():
   output = io.BytesIO() 
   writer = pd.ExcelWriter(output, engine='xlsxwriter')
   # s is a Pandas Dataframe that I want to have downloaded as an excel
   s.to_excel(writer, sheet_name='Sheet1')
   writer.save()
   output.seek(0)
   excelDownload=output.read()
   return send_file(excelDownload,attachment_filename='log.xlsx',as_attachment=True)

我的主要目标是我需要将数据帧的内容(在这种情况下' s')作为xlsx下载提供给客户端,我不想将此文件保存在服务器上(我试过了,它的确有效);我希望能够在飞行中做到这一点。对于这个pandas,只允许我使用io.BytesIO作为ExcelWriter的输入。 DataFrame中的值是实际字符串,但是当我打印excelDownload时,我得到表单的值(这只是第一行)

 b'PK\x03\x04\x14\x00\x00\x00\x08\x00\xf5c9J,)\xbdS\x13\x01\x00\x00\xc6\x01\x00\x

我不确定这是否是我的问题的根源,但是在客户端下载的xlsx无法打开;我收到错误'文件无法打开,因为文件格式或文件扩展名可能无效'。在将其作为响应发送之前,是否需要解码字节流;如果我这样做,我使用哪种编解码器? utf-8,latin-1等似乎不起作用。 另外,我收到错误 - "调试中间件在已经发送响应头的点处在流式响应中捕获异常" 在我的控制台中。我猜它是因为我发送的文件格式(excelDownload) 如何在下载的excel中正确复制数据帧的所有详细信息? 我花了十几个小时对此表示非常感谢任何指针

0 个答案:

没有答案