2011-12-13 6 views
0

私は電子メールで送信できるように出力を圧縮するpythonプログラム(v2.7)を実行しています。通常、これは期待どおりに動作しますが、圧縮されたファイルが非常に大きく、マシンのディスク領域が不足することがあります。しかし、ファインダを使用して手動でファイルを圧縮すると、正常に動作します。この場合、6MBファイルは1.6MBファイルに圧縮されますが、python zipメソッドは20Gファイルを生成します。python zipfile.ZipFile()メソッドは、6Mオリジナルから20Gのzipファイルを生成します。

zip = zipfile.ZipFile(zipfilename,"w",zipfile.ZIP_DEFLATED) 
    for f in os.listdir("."): 
     if fnmatch.fnmatch(f,"*final*"): 
      zip.write(f) 
    zip.close() 

これを修正する方法や、少なくとも巨大なファイルの生成を避ける方法はありますか?

+0

'f 'がディレクトリ、リンク、' zipfilename'である場合、 'zip.write(f)'は行いません。あなたは 'os.path.isfile()'と 'os.path.samefile()'を使うことができます。 – jfs

答えて

1

同じディレクトリにそのzipファイルを作成して、プログラムがzipファイル自体をzipファイルに追加しようとしていますか?

+0

zipファイルは同じディレクトリに作成されますが、通常は圧縮が正常に行われます。たとえば、9.6Mの前日のファイルは2.6Mに圧縮されています。 – user1086476

+0

@ user1086476:効果は 'listdir()'がファイル名を返す(任意の)順序に依存するかもしれません。追加しようとしているファイルにzipファイル自体が含まれていないことを確かめてください。 – sth

0

Linux?、私はあなたが隠しファイルとフォルダを含むと思いますか?

関連する問題