Cómo copiar y mover archivos en Python: Guía completa

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Cómo copiar y mover archivos en Python con los módulos shutil y os

El desarrollo en Python a menudo requiere realizar operaciones con archivos y directorios. Crear copias de seguridad, procesar descargas de usuarios, organizar la estructura de proyectos o desplegar aplicaciones son tareas que necesitan una gestión programática del sistema de archivos. Automatizar estas operaciones simplifica enormemente la administración de datos y elimina la necesidad de realizar tareas repetitivas manualmente.

El módulo shutil de Python proporciona utilidades de alto nivel para trabajar con archivos y directorios. Combinado con el módulo os, forma un potente conjunto de herramientas multiplataforma para crear scripts flexibles de gestión del sistema de archivos. Ambos módulos forman parte de la biblioteca estándar de Python y están disponibles sin necesidad de instalación adicional.

Introducción al módulo shutil

El módulo shutil debe su nombre a "shell utility" y ofrece un conjunto de funciones para operaciones de alto nivel con archivos y directorios. Sus funciones principales incluyen:

  • copy() — copia un archivo sin conservar los metadatos
  • copy2() — copia un archivo conservando todos los metadatos
  • copytree() — copia directorios completos de forma recursiva
  • move() — mueve archivos y carpetas a una nueva ubicación
  • rmtree() — elimina directorios y su contenido de forma recursiva
  • copyfileobj() — copia objetos de archivo byte a byte

El módulo shutil se integra eficazmente con el módulo os y es adecuado tanto para pequeños scripts de automatización como para grandes aplicaciones a nivel empresarial.

Métodos para copiar archivos

Copia básica con shutil.copy()

La función shutil.copy() realiza una copia simple del contenido del archivo sin transferir los metadatos:

import shutil

origen = 'carpeta_origen/ejemplo.txt'
destino = 'carpeta_destino/ejemplo.txt'
shutil.copy(origen, destino)

Esta función copia únicamente el contenido del archivo. Los metadatos del archivo, como la fecha de creación, la hora de la última modificación y los permisos de acceso, no se conservan. La función es similar al comando cp en sistemas Unix/Linux sin usar banderas de conservación de atributos.

Es importante recordar que si el directorio de destino no existe, se producirá un error. Se recomienda verificar previamente la existencia del directorio de destino o crearlo mediante programación.

Copia con conservación de metadatos: shutil.copy2()

Cuando necesites conservar toda la información del archivo, incluyendo marcas de tiempo, propietario y permisos de acceso, debes usar la función copy2():

shutil.copy2('archivo.txt', 'backup/archivo.txt')

Este método es especialmente útil al crear copias de seguridad, migrar proyectos entre diferentes sistemas o cuando es crítico conservar los atributos originales de los archivos. La función copy2() garantiza la reproducción más fiel posible del archivo original en la nueva ubicación.

Cómo copiar directorios completos

Copia recursiva con shutil.copytree()

Para copiar directorios completos con todas sus subcarpetas y archivos anidados se utiliza la función copytree():

shutil.copytree('proyecto_antiguo', 'proyecto_nuevo')

Por defecto, la función copytree() lanza un error FileExistsError si el directorio de destino ya existe. A partir de Python 3.8, puedes usar el parámetro dirs_exist_ok=True para permitir la sobrescritura o fusión del contenido:

shutil.copytree('proyecto_antiguo', 'proyecto_nuevo', dirs_exist_ok=True)

La función trabaja de forma recursiva y se aplica en los siguientes escenarios:

  • Clonación de plantillas de proyectos

Blogs

Book Recommendations