Comment créer un fichier .tar.gz avec compression en Python?
python
compression
zip
tarfile
shahjapan
la source
la source
Réponses:
Pour créer un
.tar.gz
(aka.tgz
) pour une arborescence de répertoires entière:Cela créera une archive tar gzippée contenant un seul dossier de niveau supérieur avec le même nom et le même contenu que
source_dir
.la source
arcname=os.path.basename(source_dir)
cela vous donnera la structure de chemin complète dusource_dir
fichier tar (dans la plupart des situations, c'est probablement gênant).arcname=os.path.basename(source_dir)
encore signifie que l'archive contient un dossier contenant le contenu desource_dir
. Si vous souhaitez que la racine de l'archive contienne le contenu proprement dit, et non le contenu d'un dossier, utilisez à laarcname=os.path.sep
place.os.path.sep
, l'archive contiendra le service "." ou dossier "/" qui n'est généralement pas un problème, mais parfois cela peut être un problème si vous traitez ultérieurement cette archive par programme. Il semble que le seul moyen vraiment propre est de faireos.walk
et d'ajouter des fichiers individuellementarcname='.'
. Pas besoin d'utiliseros.walk
.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".
la source
with tarfile.open( ..
en Python, au lieu d'appeleropen
etclose
manuellement. C'est également le cas lors de l'ouverture de fichiers normaux.Vous appelez tarfile.open avec
mode='w:gz'
, ce qui signifie «Ouvrir pour l'écriture compressée gzip».Vous voudrez probablement terminer le nom de fichier (l'
name
argument versopen
) 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'
, tout commetar
peut généralement compresser encore mieux avecbzip2
qu'il ne peut compresser avecgzip
.la source
Les réponses précédentes conseillent d'utiliser le
tarfile
module Python pour créer un.tar.gz
fichier en Python. C'est évidemment une bonne solution de style Python, mais elle présente un sérieux inconvénient en termes de rapidité d'archivage. Cette question mentionne quetarfile
c'est environ deux fois plus lent que l'tar
utilitaire sous Linux. D'après mon expérience, cette estimation est assez correcte.Donc, pour un archivage plus rapide, vous pouvez utiliser la
tar
commande en utilisant lesubprocess
module:la source
Dans ce fichier tar.gz, compressez dans le répertoire de vue ouvert. Dans la résolution, utilisez os.path.basename (file_directory)
son utilisation dans le fichier tar.gz compresser dans le répertoire
la source
En plus de la réponse de @Aleksandr Tukallo, vous pouvez également obtenir la sortie et le message d'erreur (le cas échéant). La compression d'un dossier en utilisant
tar
est assez bien expliquée dans la réponse suivante .la source