114 votes

Copier le contenu d'un répertoire dans un répertoire avec python

J'ai un répertoire /a/b/c qui contient des fichiers et des sous-répertoires. Je dois copier le répertoire /a/b/c/* dans le répertoire /x/y/z. Quelles méthodes python puis-je utiliser ?

J'ai essayé shutil.copytree("a/b/c", "/x/y/z") mais python essaie de créer /x/y/z et génère un message d'erreur. error "Directory exists" .

203voto

prosseek Points 22637

J'ai trouvé ce code qui fonctionne et qui fait partie de la bibliothèque standard :

from distutils.dir_util import copy_tree

# copy subdirectory example
from_directory = "/a/b/c"
to_directory = "/x/y/z"

copy_tree(from_directory, to_directory)

Référence :

4voto

ikudyk Points 41

Vous pouvez également utiliser glob2 pour collecter récursivement tous les chemins (en utilisant le caractère générique ** des sous-dossiers) et ensuite utiliser shutil.copyfile, en sauvegardant les chemins.

lien glob2 : https://code.activestate.com/pypm/glob2/

1voto

Brad Points 1415
from subprocess import call

def cp_dir(source, target):
    call(['cp', '-a', source, target]) # Linux

cp_dir('/a/b/c/', '/x/y/z/')

Cela fonctionne pour moi. En gros, il exécute la commande shell cp .

-15voto

kutenzo Points 17

Les librairies python sont obsolètes avec cette fonction. J'en ai fait une qui fonctionne correctement :

import os
import shutil

def copydirectorykut(src, dst):
    os.chdir(dst)
    list=os.listdir(src)
    nom= src+'.txt'
    fitx= open(nom, 'w')

    for item in list:
        fitx.write("%s\n" % item)

    fitx.close()

    f = open(nom,'r')
    for line in f.readlines():
        if "." in line:
            shutil.copy(src+'/'+line[:-1],dst+'/'+line[:-1])
        else:
            if not os.path.exists(dst+'/'+line[:-1]):
                os.makedirs(dst+'/'+line[:-1])
                copydirectorykut(src+'/'+line[:-1],dst+'/'+line[:-1])
            copydirectorykut(src+'/'+line[:-1],dst+'/'+line[:-1])
    f.close()
    os.remove(nom)
    os.chdir('..')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X