Partage
  • Partager sur Facebook
  • Partager sur Twitter

Faire un Zip de certains dossiers d'un répertoire

    23 juillet 2023 à 20:30:13

    Bonjour,

    Je cherche à créer un zip d'un répertoire, mais seulement les dossiers du répertoire et non les fichiers.

    J'ai écrit ce code :

    ----------------------------------------------------------------------------------------------------------------------

    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.

    Merci d'avance.

    -
    Edité par LoïcG6 23 juillet 2023 à 21:11:26

    • Partager sur Facebook
    • Partager sur Twitter
      24 juillet 2023 à 2:17:49

      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

      • Partager sur Facebook
      • Partager sur Twitter

      Le Tout est souvent plus grand que la somme de ses parties.

        24 juillet 2023 à 10:13:03

        Bonjour,

        Ca fonctionne os. getcwd() avec un espace entre le point et getcwd() ?

        "Il n'y a que la ligne de code suivant que je ne comprends pas :"

        tu as écris sans comprendre ce que tu faisais ?

        • Partager sur Facebook
        • Partager sur Twitter
          24 juillet 2023 à 10:57:02

          LoïcG6 a écrit:

          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.

          • Partager sur Facebook
          • Partager sur Twitter
            24 juillet 2023 à 12:08:14

            # 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

            • Partager sur Facebook
            • Partager sur Twitter

            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.
            • Editeur
            • Markdown