1

私はpython zlibを使用しており、次のことを行っています:

  1. メモリ内の大きな文字列を圧縮する ( zlib.compress)
  2. S3にアップロード
  3. S3 からデータを文字列としてダウンロードし、読み取り、解凍します ( zlib.decompress)

すべて正常に動作していますが、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 にアップロードします。

ダウンロードの場合も同様です。パイソンを使用します。デバッグ目的でも。文字列を強制的に zip ファイルに入れようとしても意味がありません。単純な zlibbed 文字列を使用するよりも (ファイル メタデータによる) オーバーヘッドが大きくなります。

于 2012-09-11T20:13:59.020 に答える
-1

アプリケーションにとって完全に間違った形式であるデバッグ目的のためだけに zip ファイルを作成する代わりに、アプリケーションにとって完全に正しい形式である zlib ストリームを解凍できるユーティリティを用意することです。そのユーティリティにはオプションpigzがあり-zます。

于 2012-09-12T03:57:58.353 に答える