Compresser le répertoire en utilisant shutil.make_archive () tout en préservant la structure du répertoire
Je suis en train de compresser un répertoire appelé test_dicoms
à un fichier zip nommé test_dicoms.zip
en utilisant le code suivant:
shutil.make_archive('/home/code/test_dicoms','zip','/home/code/test_dicoms')
Le problème est que lorsque je décompressez-le, tous les fichiers qui étaient dans /test_dicoms/
sont extraites de /home/code/
au lieu du dossier /test_dicoms/
et tous ses fichiers contenus de l'extraction de /home/code/
. Donc /test_dicoms/
a un fichier appelé foo.txt
et après je zip et décompressez foo.txt
'chemin d'accès est /home/code/foo.txt
par opposition à /home/code/test_dicoms/foo.txt
. Comment puis-je résoudre ce problème? Aussi, certains répertoires je travaille sont très grandes. Ai-je besoin d'ajouter quoi que ce soit à mon code pour le rendre ZIP64 ou est la fonction assez intelligents pour le faire automatiquement?
Voici ce qui est actuellement dans l'archive de création:
[gwarner@jazz gwarner]$ unzip -l test_dicoms.zip
Archive: test_dicoms.zip
Length Date Time Name
--------- ---------- ----- ----
93324 09-17-2015 16:05 AAscout_b_000070
93332 09-17-2015 16:05 AAscout_b_000125
93332 09-17-2015 16:05 AAscout_b_000248
source d'informationauteur G Warner
Vous devez vous connecter pour publier un commentaire.
En utilisant les termes dans la documentation, vous avez défini un root_dirmais pas un base_dir. Essayez de spécifier le base_dir comme suit:
Pour répondre à votre deuxième question, cela dépend de la version de Python que vous utilisez. À partir de Python 3.4, ZIP64 extensions sera disponible par défaut. Avant de Python 3.4,
make_archive
ne sera pas automatiquement de créer un fichier avec ZIP64 extensions. Si vous utilisez une ancienne version de Python et souhaitez ZIP64, vous pouvez appeler le sous-jacentzipfile.ZipFile()
directement.Si vous choisissez d'utiliser
zipfile.ZipFile()
directement, sans passer parshutil.make_archive()
voici un exemple:Référence:
J'ai écrit une fonction wrapper moi-même parce que shutil.make_archive est trop compliqué à utiliser.
Ici, il est http://www.seanbehan.com/how-to-use-python-shutil-make_archive-to-zip-up-a-directory-recursively-including-the-root-folder/
Et simplement le code..