无论如何,我可以使用zipfile将动态生成的内容(例如新呈现的html模板)压缩到zip文件中吗?
似乎有一些用于压缩静态内容的示例,但没有用于压缩动态内容的示例。或者,它根本不可能吗?
还有一个问题:是否可以创建一个包含一堆子文件夹的zip文件?
感谢。
答案 0 :(得分:14)
工作代码:(对于app引擎:)
output = StringIO.StringIO()
z = zipfile.ZipFile(output,'w')
my_data = "<html><body><p>Hello, world!</p></body></html>"
z.writestr("hello.html", my_data)
z.close()
self.response.headers["Content-Type"] = "multipart/x-zip"
self.response.headers['Content-Disposition'] = "attachment; filename=test.zip"
self.response.out.write(output.getvalue())
再次感谢Schnouki和Ryan。
答案 1 :(得分:7)
您可以使用ZipFile.writestr()
添加您想要的任何zip文件:
my_data = "<html><body><p>Hello, world!</p></body></html>"
z.writestr("hello.html", my_data)
您还可以使用/
(或os.sep
)作为分隔符来使用子文件夹:
z.writestr("site/foo/hello/index.html", my_data)
答案 2 :(得分:3)
除了Schnouki的优秀答案之外,您还可以将ZipFile传递给类似文件的对象,例如由StringIO.StringIO创建的对象。