Python:2.7.11
Django:1.9
熊猫:0.17.1
我应该如何创建一个潜在的大型xlsx文件下载?我正在从字典列表中创建一个包含pandas的xlsx文件,现在需要为用户提供下载它的可能性。列表位于变量中,不允许保存在本地(服务器上)
例如:
df=pandas.DataFrame(self.csvdict)
writer=pandas.ExcelWriter(’pandas\u simple.xlsx’,engine=’xlsxwriter’)
df.to_excel(书写者,工作表名称=’Sheet1’)
writer.save()
本例将创建文件并将其保存在执行脚本所在的位置。我需要的是将其创建为http响应,以便用户获得下载提示
我找到了一些关于为xlsxwriter做这件事的帖子,但不是为熊猫。我还认为我应该使用“StreamingHttpResponse”而不是“HttpResponse”
我将详细阐述@jmcnamara所写的内容。这适用于最新版本的Excel、Pandas和Django。导入语句将位于views.py的顶部,其余代码可能位于视图中:
将熊猫作为pd导入
从django.http导入HttpResponse
尝试:
从io导入BytesIO作为现代python的io
除恐怖外:
从io导入StringIO作为旧版python的io
#这是我的输出数据列表
输出=某些函数()
df_输出=pd.数据帧(输出)
#我的“Excel”文件,它是内存中的输出文件(缓冲区)
#对于新工作簿
excel_file=IO()
xlwriter=pd.ExcelWriter(excel\u文件,engine='xlsxwriter')
df_输出到excel(xlwriter,'sheetname')
xlwriter.save()
xlwriter.close()
#重要的一步,倒带缓冲区,否则当它被读取()时,您将一无所获
#但是,当您尝试在Excel中打开零长度文件时,会显示一条错误消息
excel_文件。查找(0)
#设置mime类型,以便浏览器知道如何处理该文件
response=HttpResponse(excel_file.read(),content_type='application/vnd.openxmlformats officedocument.spreadsheetml.sheet')
#在内容处置标头中设置文件名
响应['Content-Disposition']='附件;filename=myfile.xlsx'
返回响应