una sucesion recursivo recursiva que programa potencia funcion contador python recursion directory folders shutil

sucesion - copiar carpeta, subcarpetas y archivos de una ruta a otra ruta en python a través de una función recursiva



que es una funcion recursiva en python (1)

Quiero copiar algunas carpetas y archivos de una ruta a otra ruta. por ejemplo, quiero copiar la carpeta (llamada carpeta1) que tiene otras subcarpetas y algunos archivos dentro de ella a otra carpeta (dst). En mi programa, al principio, quiero verificar si hay una carpeta llamada carpeta1 en la carpeta de destino y si no, crear una carpeta con el nombre de la carpeta1 y luego copiar el contenido de la carpeta1 al destino. Además, tal vez tenemos la carpeta 1 en la ruta de destino, pero hay algunas subcarpetas de la carpeta 1 que no existen en el destino y debemos usar una función recursiva para eso. Aquí está mi función recursiva para este propósito:

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 función copy_files copiará los archivos de src +"/"+src_folder a dst+"/"+src_folder

Estoy confundido y esto no funciona. shutil.copy2 diferentes errores en shutil.copy2 que me dicen que x is not a file o x is a directory . Por favor, ¿alguien puede verificar la lógica de mi función recursiva y decirme cuál es este problema?


Utilice os.path.isdir lugar de os.path.exists para asegurarse de que solo puede ser un directorio y no un archivo. Y os.path.join es mejor que concatenar las cadenas de ruta por nosotros mismos.

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)