6

无论如何,我可以使用 zipfile 将动态生成的内容(例如新渲染的 html 模板)压缩到 zip 文件中吗?

似乎有一些用于压缩静态内容的示例,但没有用于压缩动态内容的示例。或者,根本不可能?

还有一个问题:是否可以创建一个包含一堆子文件夹的 zip 文件?

谢谢。

4

3 回答 3

14

工作代码:(对于应用引擎:)

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。

于 2009-06-08T11:16:36.387 回答
7

您可以使用以下命令将任何您想要的内容添加到 zip 文件中ZipFile.writestr()

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)
于 2009-06-08T08:01:28.090 回答
3

除了 Schnouki 的出色答案之外,您还可以将 ZipFile 传递给类似文件的对象,例如由StringIO.StringIO创建的对象。

于 2009-06-08T09:38:06.413 回答