Python parece tener funciones para copiar archivos (por ejemplo shutil.copy) y funciones para copiar directorios (por ejemplo shutil.copytree), pero no he encontrado ninguna función que maneje ambos. Claro, es trivial comprobar si desea copiar un archivo o un directorio, pero parece una extraña omisión.
¿Realmente no existe una función estándar que funcione como el cp -rcomando de Unix , es decir, que admita directorios y archivos y realice copias de forma recursiva? ¿Cuál sería la forma más elegante de solucionar este problema en Python?

copytreecopiar un solo archivo?Respuestas:
Le sugiero que primero llame
shutil.copytreey, si se lanza una excepción, vuelva a intentarlo conshutil.copy.fuente
shutil.copytreefunción mejore y gestione ambos casos en el futuro. 4) Las excepciones no son tan excepcionales en Python; por ejemplo, una iteración se detiene lanzando una excepción StopIteration.Para agregar las respuestas de Tzot y gns , aquí hay una forma alternativa de copiar archivos y carpetas de forma recursiva. (Python 3.X)
Si es tu primera vez y no tienes idea de cómo copiar archivos y carpetas de forma recursiva, espero que esto te ayude.
fuente
shutil.copyyshutil.copy2están copiando archivos.shutil.copytreecopia una carpeta con todos los archivos y todas las subcarpetas.shutil.copytreeestá utilizandoshutil.copy2para copiar los archivos.Entonces, lo análogo a lo
cp -rque estás diciendo esshutil.copytreeporquecp -rapunta y copia una carpeta y sus archivos / subcarpetas comoshutil.copytree. Sin los-rcparchivos de copias comoshutil.copyyshutil.copy2hacer.fuente
shutil.copytree('C:\myfile.txt', 'C:\otherfile'). No funciona. Eso es lo que preguntaba el OP ... hace 7 años.Unix
cpno 'admite tanto directorios como archivos':Para hacer que cp copie un directorio, debe decirle manualmente a cp que es un directorio, usando el indicador '-r'.
Sin embargo, hay algo de desconexión aquí:
cp -rcuando se le pasa un nombre de archivo, la fuente copiará felizmente solo el archivo; copytree no lo hará.fuente
Creo que copy_tree es lo que estás buscando.
fuente
El método python shutil.copytree es un desastre. He hecho uno que funciona correctamente:
fuente