1

我正在使用 python zlib,我正在执行以下操作:

  1. 压缩内存中的大字符串 ( zlib.compress)
  2. 上传到 S3
  3. zlib.decompress从 S3 ( )下载并读取数据并将其解压缩为字符串

一切正常,但是当我直接从 S3 下载文件并尝试使用标准 zip 程序打开它们时,出现错误。我注意到文件的开头不是PK,而是:

xµ}ko$7’םחע¯¸?ְ)$“שo³¶w¯1k{`

我很灵活,不介意从 zlib 切换到另一个包,但它必须是 pythonic(与 Heroku 兼容)

谢谢!

4

3 回答 3

7

zlib压缩文件;它不会创建 ZIP 存档。为此,请参阅zipfile

于 2012-09-11T19:57:56.133 回答
1

如果这是关于压缩字符串,那么zlib就是要走的路。zip 文件用于存储文件,甚至是包含文件的整个目录树。它保存文件元数据。它可以(以某种方式)用于,但不适合仅存储字符串。

如果您的应用程序只是存储和检索压缩字符串,那么“直接从 S3 下载文件并尝试使用标准 zip 程序打开它们”是没有意义的。你为什么要这样做?

编辑:

S3 通常用于存储文件,而不是字符串。你说你想存储字符串。您确定 S3 是适合您的服务吗?你看过 SimpleDB 吗?

考虑您想坚持使用 S3 并想上传压缩字符串。您的 S3 客户端库很可能希望接收到要读取的类似文件的对象。为了有效地解决这个问题,请将压缩字符串存储在 PythonStringIO对象中(在内存文件中),并将此内存文件提供给 S3 客户端库,以便将其上传到 S3。

对于下载做同样的事情。使用 Python。也用于调试目的。尝试将字符串强制放入 zipfile 是没有意义的。与使用纯 zlibbed 字符串相比,开销会更多(由于文件元数据)。

于 2012-09-11T20:13:59.020 回答
-1

仅出于调试目的而编写 zip 文件(这对于您的应用程序来说是完全错误的格式)的替代方法是拥有一个可以解压缩 zlib 流的实用程序,这对于您的应用程序来说是完全正确的格式。该实用程序pigz带有-z选项。

于 2012-09-12T03:57:58.353 回答