2012-04-05 12 views
3

tarファイルサイズ:Pythonの私は、このようにtarファイル内のファイルのサイズを計算することができます

import tarfile 
tf = tarfile.open(name='my.tgz', mode='r') 
reduce(lambda x,y: getattr(x, 'size', x)+getattr(y,'size',y), tf.getmembers()) 

が、返された合計サイズは、tarファイルではなく圧縮されたファイルサイズの要素の和(です少なくとも私はこれを試して信じているものです)。 os.path.getsizeのようなものをチェックすることなく、tarファイル全体の圧縮サイズを取得する方法はありますか?

+1

'os.path.getsize'の何が問題なのですか? – orlp

答えて

2

方法tar.gz形式の作品は、ファイルはプレーンなtarアーカイブを取得するにはgzipにパイプされていることです。 tar(1)はアーカイブが最初に圧縮されたことを知らないので、圧縮されたサイズ[*]について知ることはできません。

これは、ZIPのようなアーカイブ形式とは異なり、それ自体で圧縮します。

タールアプローチの利点は、好きな圧縮を使用できることです。より良いコンプレッサーがあれば、簡単にアーカイブを再パックすることができます。また、すべてが1つの大きなデータストリームに格納されるため、圧縮率がやや向上し、ファイル名などのメタデータも圧縮されます。

個々のアイテムを解凍するには、アーカイブファイルを検索する必要があります。

[*]:tar(1)の最初の実装には-zオプションがありませんでした。後で人々がgzipをたくさん使い始めたときに追加されました。初期の段階では、標準圧縮でcompressを使用してtar.Zを取得していました。

+1

お返事ありがとうございます。私が見つけた解決策は、ファイルオブジェクトとst_size引数を使用してサイズを取得することでした。 – Cinquo

関連する問題