2017-05-27 1 views
1

Je souhaite copier des dossiers et des fichiers d'un chemin vers un autre chemin. par exemple, je veux copier le dossier (appelé dossier1) qui a d'autres sous-dossiers et certains fichiers à l'intérieur d'un autre dossier (dst). Dans mon programme, à la première, je veux vérifier s'il y a un dossier nommé dossier1 dans le dossier de destination et si ce n'est pas le cas, créez un dossier avec le nom du dossier1, puis copiez le contenu du dossier1 vers la cible. En outre, nous avons peut-être le dossier 1 dans le chemin cible, mais il y a quelques sous-dossiers de dossier1 qui n'existent pas dans la cible et nous devons utiliser une fonction récursive pour cela. Voici ma fonction récursive à cet effet:Copier le dossier, les sous-dossiers et les fichiers d'un chemin vers un autre chemin en python via une fonction récursive

def CopyFol_Subfolders(src, src_folder, dst): 
    Dir = next(os.walk(src))[1] 
    sub_files = "" 
    sub_files = next(os.walk(src))[2] 
    if not os.path.exists(dst + "/" + src_folder): 
     os.makedirs(dst + "/" + src_folder) 
     shutil.copy2(src + "/" + src_folder, dst + "/" + src_folder) 

    elif os.path.exists(src + "/" + src_folder) and is_exist_file(src+"/"+src_folder,dst+"/"+src_folder,sub_files): 
     copy_files(sub_files, src+"/"+src_folder, dst+"/"+src_folder) 
    else: 
     subfolders = "" 
     subfolders = next(os.walk(src + "/" + src_folder+"/"))[1] 
     for folder in subfolders: 
      CopyFol_Subfolders(src + "/" + src_folder, folder, dst + "/" + src_folder) 

la fonction copy_files copie les fichiers src +"/"+src_folder-dst+"/"+src_folder

Je confus et cela ne fonctionne pas. J'ai eu différentes erreurs dans shutil.copy2 qui me disent x is not a file ou x is a directory. Pouvez-vous s'il vous plaît quelqu'un vérifier la logique de ma fonction récursive et laissez-moi savoir quel est ce problème?

Répondre

1

Utilisez os.path.isdir au lieu de os.path.exists pour vous assurer qu'il ne peut s'agir que d'un répertoire et non d'un fichier. Et os.path.join est mieux que la concaténation des chaînes de chemin par nous-mêmes.

def CopyFol_Subfolders(src, dst): 
    for item in os.listdir(src): 
     s = os.path.join(src, item) 
     d = os.path.join(dst, item) 
     if os.path.isdir(s): 
      CopyFol_Subfolders(s, d) 
     else: 
      shutil.copy2(s, d) 
+0

ce genre de réponse suites dans le commentaire. – Gahan

+0

@Gahan édité. Merci du conseil. – frankyjuang

+0

c'est une réponse complète et m'a aidé tellement mcuh. Merci @frankyjuang – Stateless