web-dev-qa-db-fra.com

Comment créer un fichier tar compressé complet en utilisant Python?

Comment créer un fichier .tar.gz avec compression en Python?

85
shahjapan

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))
145
George V. Reilly
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".

80
CNBorn

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.

30
Alex Martelli

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])
0
Aleksandr Tukallo