- 1 1. Introducción
- 2 2. Preparación para copiar archivos en Python
- 3 3. Uso básico del módulo shutil
- 4 4. Cómo copiar un directorio completo
- 5 5. Técnicas para evitar sobrescrituras
- 6 6. Cómo mover archivos en Python
- 7 7. Ejemplos prácticos de copia de archivos en Python
- 8 8. Avanzado: Copiar solo archivos de un tipo específico
- 9 9. Manejo de errores y excepciones
- 10 10. Conclusión
1. Introducción
Python ofrece potentes herramientas para realizar operaciones con archivos de manera sencilla. Entre ellas, la copia de archivos es una de las tareas más comunes. En este artículo, explicaremos cómo usar el módulo estándar de Python shutil
para copiar archivos y directorios de forma eficiente. Veremos ejemplos prácticos de código, técnicas para evitar sobrescrituras, manejo de errores y métodos avanzados de copia.
2. Preparación para copiar archivos en Python
Importar el módulo shutil
El módulo shutil
forma parte de la biblioteca estándar de Python, por lo que no requiere instalación adicional. Se importa con el siguiente código:
import shutil
Con esto podrás copiar, mover o eliminar archivos. Además, si lo combinas con el módulo os
, podrás verificar la existencia de archivos y directorios para fortalecer el manejo de errores.
Ventajas del módulo shutil
El módulo shutil
se caracteriza por su simplicidad y operaciones intuitivas. Es especialmente útil cuando necesitas trabajar con archivos o directorios completos de manera masiva.

3. Uso básico del módulo shutil
Cómo usar shutil.copy()
shutil.copy()
es la función más básica para copiar archivos. Copia un archivo desde su ubicación original hacia un nuevo destino.
import shutil
# Copiar archivo
shutil.copy('original.txt', 'copy.txt')
Si en el destino ya existe un archivo con el mismo nombre, será sobrescrito.
Cómo usar shutil.copy2()
shutil.copy2()
copia no solo el contenido del archivo, sino también sus metadatos (fecha de creación, permisos, etc.).
import shutil
# Copiar contenido y metadatos
shutil.copy2('original.txt', 'copy_with_metadata.txt')
Es muy útil cuando deseas una copia exacta y completa del archivo.
4. Cómo copiar un directorio completo
Uso de shutil.copytree()
shutil.copytree()
permite copiar un directorio completo de forma recursiva, incluyendo todos los archivos y subdirectorios.
import shutil
# Copiar un directorio completo
shutil.copytree('source_directory', 'destination_directory')
Si ya existe un directorio con el mismo nombre en el destino, se producirá un error, por lo que conviene verificar antes.
Excluir archivos o carpetas al copiar
Para excluir ciertos archivos o carpetas, puedes usar el argumento ignore
junto con shutil.ignore_patterns()
.
import shutil
# Ignorar archivos .log al copiar
shutil.copytree('source_directory', 'destination_directory', ignore=shutil.ignore_patterns('*.log'))
Este ejemplo copia todo el directorio excepto los archivos con extensión .log
.
5. Técnicas para evitar sobrescrituras
Usar os.path.exists()
Las funciones shutil.copy()
y shutil.copy2()
sobrescriben archivos por defecto. Para evitarlo, debes verificar antes si el archivo ya existe.
import shutil
import os
# Verificar existencia antes de copiar
if not os.path.exists('copy.txt'):
shutil.copy('original.txt', 'copy.txt')
else:
print('El archivo ya existe. Se omite la copia.')
Usar pathlib.Path.exists()
Con pathlib
puedes verificar la existencia de archivos de forma más intuitiva.
from pathlib import Path
# Verificación con Path
dst = Path('copy.txt')
if not dst.exists():
shutil.copy('original.txt', dst)
else:
print('El archivo ya existe. Se omite la copia.')
6. Cómo mover archivos en Python
Uso de shutil.move()
shutil.move()
sirve para mover archivos o directorios a otra ubicación.
import shutil
# Mover archivo
shutil.move('original.txt', 'new_folder/original.txt')
Si el directorio de destino no existe, se generará un FileNotFoundError
. Por ello, se recomienda verificar y crear la carpeta si es necesario.
import shutil
import os
# Verificar y crear carpeta
if not os.path.exists('new_folder'):
os.makedirs('new_folder')
# Mover archivo
shutil.move('original.txt', 'new_folder/original.txt')

7. Ejemplos prácticos de copia de archivos en Python
Ejemplo: Copiar un archivo
import shutil
# Copiar archivo
shutil.copy('data.txt', 'backup/data_backup.txt')
Ejemplo: Copiar un directorio completo
import shutil
# Copiar directorio
shutil.copytree('project_files', 'project_backup')
Ejemplo: Evitar sobrescritura
import shutil
import os
# Copiar sin sobrescribir
if not os.path.exists('backup/report.txt'):
shutil.copy('report.txt', 'backup/report.txt')
else:
print('El archivo ya existe. Se cancela la copia.')
8. Avanzado: Copiar solo archivos de un tipo específico
Con el módulo glob
puedes copiar únicamente ciertos formatos de archivo (como .txt
o .csv
).
import shutil
import glob
# Copiar todos los archivos .txt
for file in glob.glob('data/*.txt'):
shutil.copy(file, 'backup/')
Esto copiará todos los archivos .txt
de la carpeta data
hacia backup
.
9. Manejo de errores y excepciones
Es importante manejar los posibles errores que pueden ocurrir al trabajar con archivos, como que no se encuentre el archivo o que haya problemas de permisos.
Añadir manejo básico de excepciones
import shutil
try:
shutil.copy('non_existent_file.txt', 'backup/')
except FileNotFoundError as e:
print(f'Archivo no encontrado: {e}')
except PermissionError as e:
print(f'Error de permisos: {e}')
except Exception as e:
print(f'Ocurrió un error inesperado: {e}')
Este código captura errores específicos y responde de forma adecuada a cada uno.
10. Conclusión
Con el módulo shutil
de Python puedes copiar archivos y directorios de manera sencilla. Al añadir técnicas para evitar sobrescrituras, seleccionar archivos específicos y manejar errores, puedes hacer que tus operaciones con archivos sean más seguras y eficientes. Usa estas técnicas para mejorar tu flujo de trabajo diario con Python.