【发布时间】:2014-03-21 19:51:46
【问题描述】:
我的 Web 应用程序有一个报告功能,它受到了功能蠕变的影响——现在它必须提供一个包含各种文档的 .zip 文件,而不是提供 PDF。
生成文档没问题。向 Zipfile 添加文档是个问题。
到目前为止,要添加到存档中的各种文档以cStringIO、StringIO 或tempfile.SpooledTemporaryFile 对象的组合形式存在。
深入研究zipfile 库文档,似乎模块的[write][1] 函数仅适用于Strings 或机器上物理文件的路径;它不适用于类似文件的对象。
要明确一点:zipfile 可以像存档本身一样从类文件对象读取/写入 (zipfile.ZipFile),但是当向存档添加元素时,库仅支持路径名或原始字符串数据.
我发现了一篇在线博客文章,其中建议了一种可能的解决方法,但我并不急于在我的生产机器上使用它。 http://swl10.blogspot.com/2012/12/writing-stream-to-zipfile-in-python.html
有没有人有其他策略来处理这个问题?看起来我必须要么将所有内容保存到磁盘并在 I/O 上受到打击,要么将所有内容作为字符串处理并在内存上受到打击。两者都不理想。
【问题讨论】:
-
您有什么特别的理由不信任您链接的解决方案吗?它对我来说看起来很可靠 - 它添加到
os.stat和__builtin__.open的钩子绝对不会做任何事情,除非通过了虚拟文件类。 -
我一般不喜欢猴子补丁,这个猴子补丁标准库。如果我只是运行一个孤立的脚本,我不会在意。这是大型 Web 服务项目的一部分,可以从其中一个异步守护程序调用。即使需要 VirtualClass,我仍然有点担心。这种担忧可能是没有根据的,我很乐意学习其他方式。从一篇随机博客文章中引入代码,monkeypatches
os是我宁愿让其他人参与进来的东西。
标签: python python-2.7 zipfile