3

この方法で、tarfile 内のファイルのサイズを計算できます。

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

ただし、返される合計サイズは、tarfile 内の要素の合計であり、圧縮されたファイルのサイズではありません (少なくともこれは、これを試してみて確信したことです)。os.path.getsize などで確認せずに、tar ファイル全体の圧縮サイズを取得する方法はありますか?

4

1 に答える 1

2

いいえ。

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

これは、単独で圧縮する ZIP などのアーカイブ形式とは異なります。

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

欠点は、個々のアイテムをアンパックするためにアーカイブ ファイルをシークする必要があることです。

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

于 2012-04-05T12:22:51.953 に答える