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 le contenu d'un répertoire


Sujet :

Python

  1. #1
    Membre régulier
    Homme Profil pro
    dev
    Inscrit en
    Avril 2011
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : dev
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 174
    Points : 110
    Points
    110
    Par défaut copie le contenu d'un répertoire
    J'ai une question simple
    comment je peut copie le contenu d'un répertoire dans un répertoire cible déja existant et contien des fichiers.
    j'ai essayer avec sa mais sa marche pas car le répertoire cible ne doit pas etre déja existant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    path_fichiers='C:/Fichiers_DD'
    shutil.copytree(path_fichiers,path_module)
    le path module est connu il contien des fichiers déja !!!!

  2. #2
    Membre régulier
    Homme Profil pro
    dev
    Inscrit en
    Avril 2011
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : dev
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 174
    Points : 110
    Points
    110
    Par défaut
    j'ai essayer sa
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    import shutil
    import os
    src = ('C:/Users/u395591/Desktop/Arezki')
    dst = ('C:/Users/u395591/Desktop/AA')
     
    for fic in os.listdir(src):
         shutil.copy2((src+'/'+fic),dst)
    et apparament sa marche

  3. #3
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    plus propre est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    shutil.copy2(os.path.join(src, fic),dst)
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  4. #4
    Membre régulier
    Homme Profil pro
    dev
    Inscrit en
    Avril 2011
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : dev
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 174
    Points : 110
    Points
    110
    Par défaut
    merci, mais j'ai un problème lol, enfaite le continue du répertoire que je veux copier contien des répertoire et donc sa marche pas, alors comment je peux copie un répertoire?

  5. #5
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Si tu veux le faire d'une façon récursive, il faut utiliser

    - os.walk()
    - os.path.isfile() pour vérifier si c'est un fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for dirpath, dirnames, filenames in os.walk(src):
        for files in filenames:
            path = os.path.join(dirpath, files)
            if os.path.isfile(path):
                shutil.copy2(path, dst)
    Attention code non testé ...
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut shutil.copytree
    Salut,

    Quelle idée de recoder ce qui existe déjà!

    shutil.copytree(src, dst[, symlinks=False[, ignore=None]])¶

    Recursively copy an entire directory tree rooted at src. The destination directory, named by dst, must not already exist; it will be created as well as missing parent directories. Permissions and times of directories are copied with copystat(), individual files are copied using copy2().
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Vi, mais il dit que son répertoire de destination existe déjà, donc shutil.copytree ne marche pas… Et je ne vois effectivement pas d’autre moyen que d’user de os.walk(), comme le suggère fred1599 (de façon récursive, si on veut copier toute l’arborescence…).

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par mont29 Voir le message
    Vi, mais il dit que son répertoire de destination existe déjà, donc shutil.copytree ne marche pas… Et je ne vois effectivement pas d’autre moyen que d’user de os.walk(), comme le suggère fred1599 (de façon récursive, si on veut copier toute l’arborescence…).
    J'avais lu votre question initiale et puisque vous n'êtes pas encore parti en week end.... Je trouve osé d'automatiser la chose: vous ne faites pas une copie mais vous écrasez aussi les fichiers existants "dans" la cible sans plus de procès.

    Pourquoi ne pas nettoyer au préalable avec "shutil.rmtree".

    - W
    PS/Pourquoi ne pas utiliser Rsync ou un outil de gestion de conf comme mercurial?
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Une autre solution est d'aller voir dans le module shutil.py comment est codée la fonction copytree afin de l'adapter à un usage spécifique (ex: le répertoire destination existe déjà).

    C'est souvent très formateur de comprendre comment les fonctions ont été conçues dans la librairie Python.

    Tyrtamos
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  10. #10
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    import os
     
    def copyfile(source, cible):
        with open(source, 'rb') as fsource:
            with open(cible, 'wb') as fcible:
                while True:
                    buf = fsource.read(16384)
                    if not buf:
                        break
                    fcible.write(buf)
     
    def backupme(src, dest, replace=True):
        o = os
        indir = o.listdir(src)
        copyerrors = []
        for obj in indir:
            srcname = o.path.join(src, obj)
            destname = o.path.join(dest, obj)
            try:
                if o.path.isdir(srcname):
                    if not o.path.isdir(destname):
                        o.makedirs(destname)
                    backupme(srcname, destname, replace)
                else:
                    if o.path.isfile(destname) and not replace:
                        pass
                    else:
                        copyfile(srcname, destname)
            except:
                copyerrors.append((srcname, destname))
        if copyerrors:
            return copyerrors
    A vous de jouer sur replace=True/False

    @+
    Merci d'utiliser le forum pour les questions techniques.

  11. #11
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    J'ai trouvé la solution, pas possible que ça n'existe pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    from distutils import dir_util
    dir_util.copy_tree(src, dst)
    dir_util
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  12. #12
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    A ben oui.
    Si ce n'est macostools.copy et update c'est le même principe que shutil.copytree.
    Merci d'utiliser le forum pour les questions techniques.

  13. #13
    Membre régulier
    Homme Profil pro
    dev
    Inscrit en
    Avril 2011
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : dev
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 174
    Points : 110
    Points
    110
    Par défaut
    Je vous remercie tous, pour votre aide. je vais essayer tout sa avec d'autre répertoire, une fois j'ai essayer un truc avec vrais répertoire et j'ai tout écraser lool, j'était sur le point de mettre fin a mon stage lol

  14. #14
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Effectivement, c'est le genre d'expérience qui calme (Mais c'est formateur ).
    Ici pas de problème, ce n'est que de la copie.
    Pour dir_util.copy_tree update te permets de ne pas écraser les cibles si elles existent déjà.
    Mon code fait de même si tu indique backupme(src, dest, replace=False). Mais c'est plus de l'Air-programming qui ne gère pas les droits*, liens/fichiers, erreurs (enfin, il y a return copyerrors quand même qui retourne la liste des fichiers avec erreur de copie), dates*.
    Préfère la solution de fred1599. Au moins c'est fait par des pros.

    @+

    *
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    stats = os.stat(src)
    os.utime(dest, (st[ST_ATIME], st[ST_MTIME]))
    os.chmod(dest, S_IMODE(st[ST_MODE]))
    Merci d'utiliser le forum pour les questions techniques.

  15. #15
    Membre régulier
    Homme Profil pro
    dev
    Inscrit en
    Avril 2011
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : dev
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 174
    Points : 110
    Points
    110
    Par défaut
    c'est parfaits je vous remercie encore une fois je pense que ca va aider les autres car ya trop de question de se genre, et la réponse existe c bien

  16. #16
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    c'est parfaits je vous remercie encore une fois je pense que ca va aider les autres car ya trop de question de se genre, et la réponse existe c bien
    C'est clair, je ne connaissais pas, ça m'évitera beaucoup de lignes de code.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 23/10/2012, 16h52
  2. Copier le contenu d'un répertoire
    Par bianconeri dans le forum C++Builder
    Réponses: 5
    Dernier message: 30/12/2006, 13h00
  3. Lister le contenu d'un répertoire distant
    Par dody dans le forum Langage
    Réponses: 3
    Dernier message: 06/10/2005, 17h23
  4. Copie du contenu d'un répertoire vers un autre
    Par IG88 dans le forum Windows
    Réponses: 4
    Dernier message: 30/07/2004, 14h33
  5. [XSL]Copie du contenu d'un fichier en XSL
    Par fidififouille dans le forum XSL/XSLT/XPATH
    Réponses: 17
    Dernier message: 16/06/2004, 12h35

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