使用Flask将Pandas数据帧转换为CSV并提供下载

Nic*_*ick 16 python flask pandas

我在Flask应用程序中有一个Pandas数据框,我希望将其作为CSV文件返回.

return Response(df.to_csv())
Run Code Online (Sandbox Code Playgroud)

问题是输出显示在浏览器中而不是作为单独的文件下载.我怎么能改变呢?

我也尝试了以下内容,但它只是空输出.

response = make_response(df.to_csv())
response.headers['Content-Type'] = 'text/csv'
return Response(response)
Run Code Online (Sandbox Code Playgroud)

Max*_*axU 26

设置Content-Disposition告诉浏览器下载文件而不是在页面上显示其内容.

resp = make_response(df.to_csv())
resp.headers["Content-Disposition"] = "attachment; filename=export.csv"
resp.headers["Content-Type"] = "text/csv"
return resp
Run Code Online (Sandbox Code Playgroud)


小智 7

这几乎是相同的解决方案,但您可以将相同的信息传递给响应:

return Response(
       df.to_csv(),
       mimetype="text/csv",
       headers={"Content-disposition":
       "attachment; filename=filename.csv"})
Run Code Online (Sandbox Code Playgroud)


小智 5

设置content-disposition并使用stringIO将dataframe转换为流,下面是实现的代码,

execel_file = StringIO.StringIO()
filename = "%s.csv" % ('output file')
df.to_csv(execel_file, encoding='utf-8')
csv_output = execel_file.getvalue()
execel_file.close()

resp = make_response(csv_output)
resp.headers["Content-Disposition"] = ("attachment; filename=%s" % filename)
resp.headers["Content-Type"] = "text/csv"
return resp
Run Code Online (Sandbox Code Playgroud)