データベースにクエリを実行し、Python を使用して結果をアーカイブしています。ログ ファイルに書き込むときにデータを圧縮しようとしています。しかし、私はそれでいくつかの問題を抱えています。
私のコードは次のようになります。
log_file = codecs.open(archive_file, 'w', 'bz2')
for id, f1, f2, f3 in cursor:
log_file.write('%s %s %s %s\n' % (id, f1 or 'NULL', f2 or 'NULL', f3))
ただし、出力ファイルのサイズは 1,409,780 です。このファイルで実行bunzip2
すると、ファイルのサイズは 943,634 になり、そのファイルで実行すると、サイズは 217,275 になりbzip2
ます。つまり、圧縮されていないファイルは、Python の bzip コーデックを使用して圧縮されたファイルよりも大幅に小さくなります。 コマンドラインで実行する以外に、これを修正する方法はありますか?bzip2
問題が解決するかどうかを確認するために、Python の gzip コーデック (行を に変更codecs.open(archive_file, 'a+', 'zip')
) を試しました。まだ大きなファイルを取得できますがgzip: archive_file: not in gzip format
、ファイルを解凍しようとするとエラーも発生します。 何が起こっているのですか?
EDIT:私は元々、ファイルを書き込みモードではなく追加モードで開いていました。これは問題になる場合とそうでない場合がありますが、ファイルが 'w' モードで開かれている場合でも問題は残ります。