2012-04-05 4 views
3

ich die Größe der Dateien in einer Tar-Datei auf diese Weise berechnen:Python tarfile Größe

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

aber die Gesamtgröße die Summe der Elemente in der tarfile und nicht die komprimierte Dateigröße zurückgegeben wird (bei zumindest glaube ich das, indem ich das versuche). Gibt es eine Möglichkeit, die komprimierte Größe der gesamten TAR-Datei zu erhalten, ohne sie durch etwas wie os.path.getsize zu überprüfen?

+1

Was ist los mit 'os.path.getsize'? – orlp

Antwort

2

Nr

Die Art und Weise tar.gz Arbeiten ist, dass die Datei durch gzip geleitet wird ein einfaches tar-Archiv zu bekommen. tar (1) hat keine Ahnung, dass das Archiv an erster Stelle komprimiert wurde, daher kann es über komprimierte Größen [*] nichts wissen.

Dies ist anders als Archivformate wie ZIP, die selbst komprimieren.

Der Vorteil des Tar-Ansatzes ist, dass Sie jede beliebige Komprimierung verwenden können. Wenn es einen besseren Kompressor gibt, können Sie Ihre Archive einfach neu packen. Da alles in einen großen Datenstrom gestellt wird, ist das Komprimierungsverhältnis etwas besser und Metadaten wie Dateinamen werden ebenfalls komprimiert.

Der Nachteil ist, dass Sie in der Archivdatei suchen müssen, um einzelne Elemente zu entpacken.

[*]: Die ersten Implementierungen von tar (1) hatten keine Option -z; Es wurde später hinzugefügt, als Leute begannen, gzip zu benutzen. In den frühen Tagen verwendete die Standardkompression compress, um tar.Z zu erhalten.

+1

danke für die Antwort. Die Lösung, die ich fand, war, das Argument file object und st_size zu verwenden, um die Größe zu erhalten. – Cinquo

Verwandte Themen