2012-04-05 5 views
3

Je peux calculer la taille des fichiers dans un fichier tar de cette façon:Python Taille du fichier 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()) 

mais la taille totale retournée est la somme des éléments du tarfile et non la taille du fichier compressé (à le moins c'est ce que je crois en essayant ceci). Existe-t-il un moyen d'obtenir la taille compressée du fichier tar entier sans le vérifier par quelque chose comme os.path.getsize?

+1

Qu'est-ce qui ne va pas avec 'os.path.getsize'? – orlp

Répondre

2

n °

La façon dont les œuvres tar.gz est que le fichier est canalisé par gzip pour obtenir une archive tar plaine. tar (1) n'a aucune idée que l'archive a été compressée en premier lieu, donc il ne peut pas connaître les tailles compressées [*].

Ceci est différent des formats d'archive comme ZIP qui se compressent d'eux-mêmes. L'avantage de l'approche tar est que vous pouvez utiliser n'importe quelle compression que vous aimez. Si un meilleur compresseur arrive, vous pouvez facilement réemballer vos archives. De plus, puisque tout est mis dans un grand flux de données, le taux de compression est légèrement meilleur et les métadonnées comme les noms de fichiers sont également compressées.

L'inconvénient est que vous devez rechercher dans le fichier d'archive pour décompresser les éléments individuels.

[*]: Les premières implémentations de tar (1) n'avaient pas d'option -z; il a été ajouté plus tard quand les gens ont commencé à utiliser gzip beaucoup. Au début, la compression standard utilisait compress pour obtenir tar.Z.

+1

merci pour la réponse. la solution que j'ai trouvée consistait à utiliser l'objet fichier et l'argument st_size pour obtenir la taille. – Cinquo