【问题标题】:Zipping dynamic files in App Engine (Python)在 App Engine (Python) 中压缩动态文件
【发布时间】:2010-11-01 02:49:48
【问题描述】:

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

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

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

谢谢。

【问题讨论】:

    标签: python google-app-engine zipfile


    【解决方案1】:

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

    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。

    【讨论】:

      【解决方案2】:

      您可以使用 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)
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 谢谢瑞恩! _
        • 如果你使用的是 Python 3,它需要是 io.BytesIO(StringIO 模块已经消失,而 zipfile 需要一个字节缓冲区)
        • 糟糕,刚刚意识到这是关于 App Engine 的。您可能应该忽略我的最后评论:),抱歉。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-21
        相关资源
        最近更新 更多