IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Copie de répertoire


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Copie de répertoire
    Bonjour,

    je débute en python et j'ai du mal à copier des sous répertoires commençant par une chaine vers
    une autre destination où ces sous répertoires auront un nom différent.
    Je parcours un fichier csv où a chaque nom de sous répertoires est associer sa nouvelle destination.

    Voila un bout du code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for myTestLineTab in myDoubleTab:
     
         self.result = os.listdir(self.last)      
         for dirs in self.result: 
            if myTestLineTab[2]==dirs:
               print(dirs)  
               shutil.copytree (src=os.sep.join([self.result,dirs],dst=os.sep.join([self.destFullPath_2,myTestLineTab[0],myTestLineTab[1]),symlinks=False)
    (Je n'ai pas pu mettre la dernière ligne dans le if, sinon il y est bien)
    J'ai une erreur du genre :
    line 188
        shutil.copytree(src=os.sep.join([self.result,dirs]),dst=os.sep.join([self.de
    stFullPath_2,myTestLineTab[0],myTestLineTab[1]]),symlinks=False
    )
    TypeError: sequence item 0: expected string, list found 
    
    mytestLineTab est une ligne dans le double tableau myDoubleTab
    Dans self.result se trouve la liste des sous repertoires
    Lorsqu'il correspond aux lignes myTestLineTab[2],
    j'affiche les sous repertoires.



    Maintenant vient mon problème, j'ai plusieurs sous repertoires mais
    j'aimerais copier chaque sous repertoire à la destination (self.destFullPath_2,myTestLineTab[0],myTestLineTab[1]),symlinks=False)qui lui correspond dans le mapping.
    Le problème c'est que dans dirs j'ai plusieurs sous repertoires donc une list pas un string.
    Comment faire passer chaque sous repertoires dans le shutil.copytree.

    Merci d'avance

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Lorsque vous postez du code, pensez a la balise # qui s'affiche dans la barre d'outil.
    Sérieusement arrivez vous a relire une chose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    shutil.copytree (src=os.sep.join([self.result,dirs],dst=os.sep.join([self.destFullPath_2,myTestLineTab[0],myTestLineTab[1]),symlinks=False)
    Pour quoi ne pas écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    src = ...
    dst = ...
    shutil.copytree(src, dst, symlinks=False)
    Cela vous permettrait de voir que vous commencez "dst" avant d'avoir fini "src"...

    Le problème c'est que dans dirs j'ai plusieurs sous repertoires donc une list pas un string.
    Comment faire passer chaque sous repertoires dans le shutil.copytree.
    shutil.copytree prend un src et un dst...
    Si vous voulez traiter +sieurs répertoires, il faudra l'appeler plusieurs fois ou l'emballer dans votre fonction mycopytree.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Si vous voulez traiter +sieurs répertoires, il faudra l'appeler plusieurs fois ou l'emballer dans votre fonction mycopytree.
    Effectivement je veux traiter plusieurs répertoires mais même avec une boucle for pour appeler plusieurs shutil.copytree j'ai toujours le même message d'erreur. Je ne vois pas comment l'emballer dans ma fonction mycopytree. Je n'ai pas de fonction mycopytree.

    Il faudrait que j'arrive à récuperer chaque sous repertoire dans dirs et les passer un à un dans shutil.copytree.
    c'est ce que je n'arrive pas à faire...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
             for myTestLineTab in myDoubleTab:
                self.result = os.listdir(self.last)      
                for dirs in self.result: 
                   if myTestLineTab[2]==dirs:
                      print(dirs)  
                      src=os.sep.join([self.result,dirs])
                      dst=os.sep.join([self.destFullPath_2,myTestLineTab[0],myTestLineTab[1])
                      shutil.copytree (src,dst,symlinks=False)

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    os.listdir(path) va retourner la liste des noms de fichiers dans "path".
    Il n'y a pas de bonne raison pour que tous soient des répertoires.
    Et je ne comprends pas trop ce que vous cherchez a faire avec "src=os.sep.join([self.result,dirs])".

    Python est un langage sympa car vous pouvez tester vos constructions "a la console" avant de les intégrer dans du code plus "complique". Vous pourriez commencer par jouer avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> source = '.'
    >>> for name in os.listdir(source):
    ...    src = os.path.join(source, name)
    ...    print (src)
    ...
    A partir de la si "src" est un répertoire, vous pouvez construire le dst a passer a copytree.

    Citation Envoyé par malki59 Voir le message
    Effectivement je veux traiter plusieurs répertoires mais même avec une boucle for pour appeler plusieurs shutil.copytree j'ai toujours le même message d'erreur. Je ne vois pas comment l'emballer dans ma fonction mycopytree. Je n'ai pas de fonction mycopytree.
    A vous de la faire!
    Il faudrait que j'arrive à récuperer chaque sous repertoire dans dirs et les passer un à un dans shutil.copytree.
    Si vous ne connaissez pas les structures de bases comme une liste ou si vous n’êtes pas a l'aise avec la programmation "en général", il faudrait peut être passer du temps a apprendre avec un tuto.
    En ayant acquis un minimum de bases, programmer peut être un plaisir, sinon ce sera plutôt une torture.
    A vous de voir.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Au fait l'erreur se trouve dans self.result qui est une liste
    je recupère convenablement mes sous repertoires et je les passe bien dans shutil.copytree.

    "src=os.sep.join([self.result,dirs])" devait être le nom du repertoire à copier dans dest (que ce qui s'y trouve symlinks=False).
    Sauf que self.result était une liste de repertoires se trouvant dans le repertoire que je voulais balayer.
    Il n'y a pas de problème avec le dirs, je récupère les sous repertoires que je veux (myTestLineTab[2]==dirs)
    et ils sont copier un à un dans le shutil.copytree.

    C'était juste une erreur d'inattention. En tout cas merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MS-DOS]Copie de répertoire avec filtre
    Par tripper.dim dans le forum Windows
    Réponses: 5
    Dernier message: 07/10/2014, 23h23
  2. copie récursive répertoire
    Par hisy dans le forum Langage
    Réponses: 4
    Dernier message: 16/03/2007, 08h40
  3. [VBA - E] Copie de répertoires
    Par sat478 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 10/10/2006, 11h45
  4. [VB Script] Problème de copie dans répertoire
    Par ben_harper dans le forum VBScript
    Réponses: 3
    Dernier message: 19/06/2006, 10h25
  5. Copie de répertoire
    Par Mateo dans le forum C
    Réponses: 3
    Dernier message: 10/06/2004, 15h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo