Wie kann ich eine .tar.gz-Datei mit Komprimierung in Python erstellen?
python
compression
zip
tarfile
shahjapan
quelle
quelle
Antworten:
So erstellen Sie ein
.tar.gz
(aka.tgz
) für einen gesamten Verzeichnisbaum:Dadurch wird ein komprimiertes Teerarchiv erstellt, das einen einzelnen Ordner der obersten Ebene mit demselben Namen und Inhalt wie enthält
source_dir
.quelle
arcname=os.path.basename(source_dir)
weglassen, erhalten Sie die gesamte Pfadstruktursource_dir
in der TAR-Datei (in den meisten Situationen ist dies wahrscheinlich unpraktisch).arcname=os.path.basename(source_dir)
still bedeutet, dass das Archiv einen Ordner enthält, der den Inhalt von enthältsource_dir
. Wenn Sie möchten, dass das Stammverzeichnis des Archivs den Inhalt selbst und nicht den Inhalt eines Ordners enthält, verwenden Siearcname=os.path.sep
stattdessen.os.path.sep
, dann enthält das Archiv den Dienst "." oder "/" Ordner, was normalerweise kein Problem ist, aber manchmal kann es ein Problem sein, wenn Sie dieses Archiv später programmgesteuert verarbeiten. Es scheint der einzig wirklich saubere Weg zu seinos.walk
, Dateien einzeln zu erstellen und hinzuzufügenarcname='.'
. Keine Notwendigkeit zu verwendenos.walk
.Wenn Sie eine komprimierte tar.bz2-Datei erstellen möchten, ersetzen Sie einfach den Namen der Dateierweiterung durch ".tar.bz2" und "w: gz" durch "w: bz2".
quelle
with tarfile.open( ..
in Python verwenden, anstatt aufzurufenopen
undclose
manuell. Dies ist auch beim Öffnen regulärer Dateien der Fall.Sie rufen tarfile.open mit auf
mode='w:gz'
, was "Offen für gzip-komprimiertes Schreiben" bedeutet.Sie möchten wahrscheinlich den Dateinamen (das
name
Argument zuopen
) mit beenden.tar.gz
, dies hat jedoch keine Auswirkungen auf die Komprimierungsfähigkeiten.Übrigens erhalten Sie normalerweise eine bessere Komprimierung mit einem Modus von
'w:bz2'
, genau wie Sie normalerweise noch besser komprimierentar
könnenbzip2
als mitgzip
.quelle
In früheren Antworten wird empfohlen, das
tarfile
Python-Modul zum Erstellen einer.tar.gz
Datei in Python zu verwenden. Das ist natürlich eine gute Lösung im Python-Stil, hat aber einen gravierenden Nachteil in der Geschwindigkeit der Archivierung. In dieser Frage wird erwähnt, dass diestarfile
ungefähr zweimal langsamer ist als dastar
Dienstprogramm unter Linux. Nach meiner Erfahrung ist diese Einschätzung ziemlich richtig.Für eine schnellere Archivierung können Sie den
tar
Befehl mithilfe dessubprocess
Moduls verwenden:quelle
In dieser tar.gz-Datei im geöffneten Ansichtsverzeichnis komprimieren Verwenden Sie zum Lösen os.path.basename (file_directory).
seine Verwendung in der Datei tar.gz komprimieren im Verzeichnis
quelle
Zusätzlich zur Antwort von @Aleksandr Tukallo können Sie auch die Ausgabe- und Fehlermeldung erhalten (falls dies auftritt). Das Komprimieren eines Ordners mit
tar
wird in der folgenden Antwort ziemlich gut erklärt .quelle