在Python中处理动态zipfile创建的好方法

时间:2014-03-21 19:51:47

标签: python python-2.7 zipfile

我的Web应用程序上有一个报告功能,该功能已经过Feature Creep - 而不是提供PDF,它现在必须提供包含各种文档的.zip文件。

生成文档很好。将文档添加到Zipfile是个问题。

到目前为止,要添加到存档的各种文档已混合使用cStringIOStringIOtempfile.SpooledTemporaryFile个对象。

深入研究zipfile库文档,模块的[write][1]函数似乎只能用于Strings或机器上物理文件的路径;它不适用于类文件对象。

为了清楚起见:zipfile可以从类似文件的对象读取/写入归档本身(zipfile.ZipFile),但是当向归档添加元素时,库只支持路径名或原始字符串数据。

我发现了一个在线博客帖子,建议可能的解决方法,但我并不急于在我的生产机器上使用它。 http://swl10.blogspot.com/2012/12/writing-stream-to-zipfile-in-python.html

有没有其他策略可以解决这个问题?看起来我必须将所有内容保存到磁盘并对I / O进行命中,或者将所有内容作为字符串处理并对内存进行点击。两者都不理想。

1 个答案:

答案 0 :(得分:0)

使用您所指的解决方案(使用monkeypathing)。

关于你对monkeypathing事情的担忧听起来不够健全:请详细说明如何从其他地方使用monkeypatched方法。

用Python挂钩并不是特别的魔力。这意味着,某人为某事物分配了替代价值/功能,已经定义了什么。这必须通过一行代码完成,并且范围非常有限。

在博客的例子中,monkeypatched os函数的范围只是ZipHooks类。

不要害怕,它会在你不知情的情况下泄漏到其他地方或打破完整的系统。即使是其他软件包,使用ZipHooks类导入您的模块也无权访问pathed statopen,除非他们使用ZipHooks类或明确地从您的包中调用stat_hookopen_hook