11
votes

Comment compresser un dossier avec le module GZIP Python?

Je crée un logiciel Python qui comprime les fichiers / dossiers ... Comment créerai une section du code qui demande l'entrée de l'utilisateur de l'emplacement du dossier, puis la compresse. J'ai actuellement le code pour un seul fichier mais pas un dossier rempli de fichiers. S'il vous plaît expliquer en détail comment faire cela.


1 commentaires

Gzip n'est-il pas censé faire une compression, pas l'archivage? Ne devriez-vous pas être peut-être envisagé de regarder le goudron au lieu de cela?


4 Réponses :


8
votes

gzip ne fait pas compression des dossiers / répertoires, uniquement des fichiers uniques. Utilisez le zipfile module à la place.


0 commentaires

-1
votes

Comme Larsmans dit, la compression GZIP n'est pas utilisée pour les répertoires, uniquement des fichiers uniques. La façon habituelle de faire des choses avec Linux est de mettre d'abord le répertoire dans une citagie, puis de le comprimer.


1 commentaires

Il convient de mentionner que vous pouvez obtenir une meilleure compression lorsque vous goudrez, puis compressez que si vous deviez compresser chaque fichier individuellement.



9
votes

Je ne fais pas ui, vous êtes donc seul pour obtenir le nom du dossier de l'utilisateur. Voici un moyen de faire une tarfil comprimé GZ. Il ne les pas recueille sur les sous-dossiers, vous aurez besoin de quelque chose comme Os.walk () pour cela. xxx


3 commentaires

En fait, vous pouvez simplement écrire tar.add (folder_path) et il sera ajouté de manière récursive. (Bien sûr, cela pourrait être une nouvelle fonctionnalité ajoutée au cours des cinq années que cette réponse a été postée!) De plus, la boucle pour ne devrait pas être indentée ici, à moins que vous ne changiez tar = tarfile.open (...) à avec tarfile.open (...) comme goudron: (qui est une bonne idée, puis vous pouvez vous débarrasser de la goudron () ligne).


Merci, je ne sais pas comment cette erreur d'indentation a survécu pendant 5 ans.


Vous n'avez pas besoin d'avoir taud.add (OS.Path.Join (folder_path, nom)) ?



26
votes

Le code pour compresser un dossier dans le fichier tar est le suivant:

import tarfile

tar = tarfile.open("TarName.tar.gz", "w:gz")
tar.add("folder/location", arcname="TarName")
tar.close()


0 commentaires