Comment créer un fichier .tar.gz avec compression en Python?
Construire un .tar.gz
(alias .tgz
) pour une arborescence de répertoires complète:
import tarfile
def make_tarfile(output_filename, source_dir):
with tarfile.open(output_filename, "w:gz") as tar:
tar.add(source_dir, arcname=os.path.basename(source_dir))
import tarfile
tar = tarfile.open("sample.tar.gz", "w:gz")
for name in ["file1", "file2", "file3"]:
tar.add(name)
tar.close()
Si vous souhaitez créer un fichier compressé tar.bz2, remplacez simplement le nom de l'extension de fichier par ".tar.bz2" et "w: gz" par "w: bz2".
Vous appelez tarfile.open avec mode='w:gz'
, signifiant "Ouvert pour l'écriture compressée gzip."
Vous voudrez probablement terminer le nom de fichier (l'argument name
de open
) par .tar.gz
, mais cela n’affecte pas les capacités de compression.
BTW, vous obtenez généralement une meilleure compression avec un mode de 'w:bz2'
, comme tar
peut généralement être encore mieux compressé avec bzip2
qu'il ne peut compresser avec gzip
.
Les réponses précédentes conseillent d’utiliser le module tarfile
python pour créer un .tar.gz
fichier en python. C'est évidemment une bonne solution de style python, bien qu'elle présente un sérieux inconvénient en termes de rapidité d'archivage. Cette question mentionne que tarfile
est environ deux fois plus lent que l'appel direct à la commande sous Linux. D'après mon expérience, cette estimation est plutôt correcte.
Donc, pour un archivage plus rapide, vous pouvez utiliser la commande directe Linux en utilisant le module subprocess
:
subprocess.call(['tar', '-czf', output_filename, file_to_archive])