首页 > 解决方案 > 包含带有多个 csv 文件的 zip 文件的 Django 响应

问题描述

我有一个算法可以输出一个元组列表,可以将其写入 csv 文件。

我正在尝试编写 3 个 csv 文件(通过 StringIO 所以不写入磁盘),然后将它们完全压缩。之后,我想将其附加到 django 请求的响应中。

我不确定最有效的方法是什么。我应该StringIO通过我的算法来存储 3 个调用吗?我应该在压缩它们之前先创建 csv 文件吗?我可以直接使用 1zipfile调用而不需要调用 3 StringIOs 的中间步骤吗?

谢谢

标签: pythondjangozipfilestringio

解决方案


您可以执行以下操作:

# Create the zip file
output = StringIO.StringIO()
f = zipfile.ZipFile(output, 'w', zipfile.ZIP_DEFLATED)
f.writestr('first.csv', '<the content of first.csv>')
f.writestr('second.csv', '<the content of second.csv>')
f.writestr('third.csv', '<the content of third.csv>')
f.close()
# Build your response
response = HttpResponse(output.getvalue(), mimetype='application/zip')
response['Content-Disposition'] = 'attachment; filename="yourzipfilename.zip"'
return response

如果文件很大,您可能需要使用StreamingHttpResponse(或FileResponse ) https://stackoverflow.com/a/48949959/1904584


推荐阅读