import os
import shutil
print("Création du Zip \n")
reponse=input("Chemin du projet ? ")
os.chdir(reponse)
os.chdir('..')
path = os. getcwd()
print(path)
fichiers=os.listdir(reponse)
files_dir = [f for f in fichiers if os.path.isdir(os.path.join(reponse, f))]
print(files_dir)
lien=path.split('\\')[-1]
format = "zip"
shutil.make_archive(lien, format, reponse)
Il n'y a que la ligne de code suivant que je ne comprends pas :
files_dir = [f for f in fichiers if os.path.isdir(os.path.join(reponse, f))]
Pour créer le zip j'ai écris : shutil.make_archive(lien, format, files_dir) mais cela ne marche pas, je pense que je m'y prends mal. files_dir est juste une liste et non le contenu.
Si vous pouviez m'aider pour réaliser mon programme.
La ligne suivante: files_dir = [f for f in fichiers if os.path.isdir(os.path.join(reponse, f))] Crée la liste de toutes les entrées de ton dossier qui sont des sous-dossiers. Le join sert à insérer le bon séparateur, soit '/' ou '\' Je suis cependant surpris qu'on puisse faire un zip de seulement les dossiers. Les pointeurs vers les fichiers dans le .zip n'auront à mon avis aucun sens.
À moins que tu fasses un .zip pour "chaque" sous-dossier avec ses sous-sous-dossiers avec les fichiers inclus.
La fonction make_archive s'attend à recevoir un nom et pas une liste de noms.
Je pense que tu devrais faire une boucle et donner le nom de la source et de la destination pour chaque sous-dossier.
- Edité par PierrotLeFou 24 juillet 2023 à 2:48:32
Le Tout est souvent plus grand que la somme de ses parties.
Pour créer le zip j'ai écris : shutil.make_archive(lien, format, files_dir) mais cela ne marche pas, je pense que je m'y prends mal. files_dir est juste une liste et non le contenu.
La documentation de make_archive ne semble pas avoir d'interface pour ajouter plusieurs répertoires à une archive mais ça devrait être possible avec zipfile. Reste à apprendre à utiliser le module qui va bien et éventuellement passer du temps à comprendre les exemples de code trouvés sur Internet si la documenation ne suffit pas.
# New method (Python 3.11)
with zipfile.ZipFile(filename, 'w', zipfile.ZIP_DEFLATED) as zfile:
for dirpath, _, _ in os.walk(rootdir):
zfile.mkdir(dirpath)
# Old method
with zipfile.ZipFile(filename, 'w', zipfile.ZIP_DEFLATED) as zfile:
for dirpath, _, _ in os.walk(rootdir):
zfile.writestr(dirpath + '/', '')
- Edité par ZaZa39 24 juillet 2023 à 12:09:58
Faire un Zip de certains dossiers d'un répertoire
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Le Tout est souvent plus grand que la somme de ses parties.