Si una ruta como b/c/
no existe en ./a/b/c
, shutil.copy("./blah.txt", "./a/b/c/blah.txt")
se quejará de que el destino no existe. ¿Cuál es la mejor manera de crear la ruta de destino y copiar el archivo a esta ruta?crear ruta de destino para archivos shutil.copy
Respuesta
Utilice os.makedirs
para crear el árbol de directorios.
Uso algo similar a esto para verificar si el directorio existe antes de hacer cosas con él.
if not os.path.exists('a/b/c/'):
os.mkdir('a/b/c')
Por lo que sé, esto no funcionará en Python 2.7: OSError: [Errno 2] No such archivo o directorio: './a/b/c' – SummerBreeze
Prefiero usar 'os.makedirs' en su lugar, lo que crearía directorios principales si no existieran. – feilong
Tenga en cuenta que esto adolece de una condición de carrera (si alguien más u otro hilo crea el directorio entre el cheque y la llamada 'makedirs'). Es mejor llamar a 'os.makedirs' y atrapar la excepción si existe la carpeta. Compruebe SoF para la creación de directorio. – farmir
manera EAFP, evitar las razas y llamadas al sistema que no sean necesarios:
import errno
import os
import shutil
src = "./blah.txt"
dest = "./a/b/c/blah.txt"
# with open(src, 'w'): pass # create the src file
try:
shutil.copy(src, dest)
except IOError as e:
# ENOENT(2): file does not exist, raised also on missing dest parent dir
if e.errno != errno.ENOENT:
raise
# try creating parent directories
os.makedirs(os.path.dirname(dest))
shutil.copy(src, dest)
Todavía hay una carrera si el directorio 'dest' se crea después de la llamada a' shutil.copy' pero antes de la llamada a 'os.makedirs'. – Lii
- 1. ruta de destino para move_uploaded_file en php
- 2. Copia SVN: Crear ruta de destino si no existe
- 3. Cómo forzar rsync para crear carpeta de destino
- 4. Hacer advertencia de archivos, anulando los comandos para el destino
- 5. xcode 4 lista de archivos con destino
- 6. Adjuntar para impulsar :: sistema de archivos :: ruta
- 7. crear archivos, crear directorios recursivamente
- 8. edificio ruta PKIX falló: no puede encontrar la ruta de certificación válida al destino solicitado
- 9. Cómo obtener la ruta de los Archivos de programa independientemente de la arquitectura de la máquina de destino
- 10. AutoMapper: crear instancia de tipo de destino si fuente == nulo
- 11. No se puede encontrar una ruta de certificación válida para el destino solicitado
- 12. MSDeploy: "Deja archivos adicionales en destino" de línea de comandos?
- 13. ¿Debería Copy-Item crear la estructura de directorio de destino?
- 14. Ruta de archivos dinámicos en Django
- 15. ¿Cómo puedo acceder mediante programación a la ruta de destino de un enlace simbólico de Windows?
- 16. os.path.exists() para archivos en su ruta de acceso?
- 17. Agregar destino para UIButton - iOS
- 18. Reutilización de una ruta de archivos
- 19. biblioteca C++ para crear archivos tar
- 20. gdb - generate-core-file para destino remoto?
- 21. Crear archivos y carpetas de forma recursiva
- 22. Ruta ASP.NET MVC: desviar el manejador de archivos estáticos para la ruta
- 23. Hace camello crear un hilo para cada ruta
- 24. Estado de HTTP 409: la ruta de implementación de destino [...] no coincide con el prefijo de ruta esperado de POM
- 25. ¿Por qué shutil.copy() levanta una excepción de permiso cuando cp no lo hace?
- 26. ¿Cómo usar MsBuild MsDeployPublish para el sistema de archivos local de destino?
- 27. php crear cremalleras sin ruta de acceso a los archivos dentro del zip
- 28. ¿Cómo obtengo una ruta adecuada para almacenar archivos temporales?
- 29. Cómo cambiar el directorio de salida para un destino
- 30. Método abreviado de teclado de Xcode 4 para cambiar destino destino de construcción
usar 'os.makedirs (carpeta, exists_ok = True)' para cuando puede existir carpeta de destino. – Martlark
Tenga en cuenta que la opción 'exists_ok' solo está presente en Python 3.2+ –
Es' exist_ok', no 'exists_ok' – CharlesB