Python zlib不以标准zip格式压缩

Python zlib不以标准zip格式压缩,python,compression,zlib,Python,Compression,Zlib,我正在使用python zlib,我正在执行以下操作: 压缩内存中的大字符串zlib.Compress 上传到S3 从S3 zlib下载并读取数据,并将其解压缩为字符串。decompress 一切正常,但当我直接从S3下载文件并尝试用标准zip程序打开它们时,我遇到了一个错误。我注意到文件的开头不是PK,而是: xµ}ko$7’םחע¯¸?ְ)$“שo³¶w¯1k{` 我很灵活,不介意从zlib切换到另一个包,但它必须与pythonicheroku兼容 谢谢 压缩文件;它不会创建ZIP存档。

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

压缩内存中的大字符串zlib.Compress 上传到S3 从S3 zlib下载并读取数据,并将其解压缩为字符串。decompress 一切正常,但当我直接从S3下载文件并尝试用标准zip程序打开它们时,我遇到了一个错误。我注意到文件的开头不是PK,而是:

xµ}ko$7’םחע¯¸?ְ)$“שo³¶w¯1k{`
我很灵活,不介意从zlib切换到另一个包,但它必须与pythonicheroku兼容


谢谢

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

压缩文件;它不会创建ZIP存档。关于这一点,请参见。

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

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

编辑:

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

假设您希望坚持使用S3,并且希望上传压缩字符串。您的S3客户机库很可能希望接收一个类似文件的对象进行读取。为了有效地解决这个问题,将压缩后的字符串存储在内存文件中的Python StringIO对象中,并将此内存文件提供给S3客户机库,以便将其上载到S3


下载时也要这样做。使用Python。也用于调试目的。试图将字符串强制放入zipfile中是没有意义的。由于文件元数据而产生的开销将比使用普通的zlibbed字符串要大。

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

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

编辑:

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

假设您希望坚持使用S3,并且希望上传压缩字符串。您的S3客户机库很可能希望接收一个类似文件的对象进行读取。为了有效地解决这个问题,将压缩后的字符串存储在内存文件中的Python StringIO对象中,并将此内存文件提供给S3客户机库,以便将其上载到S3


下载时也要这样做。使用Python。也用于调试目的。试图将字符串强制放入zipfile中是没有意义的。与使用普通zlibbed字符串相比,文件元数据会带来更多的开销。

编写zip文件只是为了调试目的的一种替代方法是使用一个实用程序来解压缩zlib流,这对于您的应用程序来说是完全错误的格式。该实用程序带有-z选项。

除了为调试目的编写zip文件(这对于您的应用程序来说是完全错误的格式)之外,还有一个实用程序可以解压缩zlib流,这对于您的应用程序来说是完全正确的格式。该实用程序带有-z选项。

但我如何在字符串上执行该操作?我正在尽可能避免使用文件Well,zipfile可以处理类似文件的对象,所以可以使用StringIO。但是我如何在字符串上做到这一点呢?我正在尽可能避免使用文件Well,zipfile使用类似文件的对象,因此您可以使用StringIO.Debug。我喜欢人类可以重新阅读的标准东西。此外,任何软件或编程语言都可以轻松阅读ZIP。我需要的实际上是S3,而不是SimpleDB。你知道开销是多少吗?内存消耗?正如在原始问题中所述,这不是必须的,而是一种易于调试的格式,我认为它比一种非标准格式要好,而非作为一种有价格的格式的标准。谢谢你的快速回答!对于meDebug来说,StringIO听起来不错。我喜欢人类可以重新阅读的标准东西。此外,任何软件或编程语言都可以轻松阅读ZIP。我需要的实际上是S3,而不是SimpleDB。你知道开销是多少吗?内存消耗?正如在原始问题中所述,这不是必须的,而是一种易于调试的格式,我认为它比一种非标准格式要好,而非作为一种有价格的格式的标准。谢谢你的快速回复 呃!StringIO对我来说不错-将在大多数操作系统上使用gcc进行编译,此处修复的zlib依赖项甚至可以在cygwin/windows上运行-将在大多数操作系统上使用gcc进行编译,此处修复的zlib依赖项甚至可以在cygwin/windows上运行