Módulo shutil en Python



@eduardo_gpg

Número de visitas 1484

Tiempo de lectura 2 min

16 Febrero 2023

En entregas anteriores ya hemos hablado sobre diferentes formas en las que es posible manipular directorios del sistema con Python, principalmente utilizando el módulo pathlib. Pues bien, continuando con el tema, en esta ocasión me gustaría habláramos acerca del módulo shutil, un módulo que nos provee de diferentes funciones el alto nivel para realizar operaciones sobre directorios en el sistema.

Este módulo que ya se encuentra en la biblioteca estándar de Python, por lo tanto para poder utilizarla no hay que instalar absolutamente nada.

Bien, una vez dicho todo esto, comencemos con el post.

Mover documentos.

Entrando en materia, lo primero que haremos será mover un archivo a un directorio diferente. Para ello haremos uso del la función move. Esta función recibe 2 argumentos de tipo string, donde el primer argumento hace referencia al directorio del archivo que deseamos mover, y el segundo argumento será el nuevo directorio donde deseamos este archivo sea movido.

import shutil

shutil.move(
    'users/documents/python/main.py', 
    'users/documents/main.py'
)

Lo interesante de la función move es que, al estilo de unix, podemos utilizar dicha función para renombrar un archivo, basta con "mover" el archivo al mismo directorio con un nombre diferente.

import shutil

shutil.move(
    'main.py', 
    'new_file_name.py'
)

Copiar documentos.

Ahora, si lo que deseamos no es mover al archivo como tal, si no simplemente copiarlo, bueno, en ese caso haremos uso de la función copy.

import shutil

shutil.copy(
    'users/documents/python/main.py', 
    'users/documents/main.py'
)

Esta función hará una copia exacta del archivo que hayamos indicado como primer argumento.

Eliminar archivos y directorios

Ya para finalizar este post hablemos sobre como eliminar directorios (carpetas) del sistema. Para ellos nos apoyaremos de una nueva función, me refiero a rmtree, función que nos permiten eliminar una carpeta del sistema, ya se que la carpeta se encuentre vacía o posea sub directorios.

Veamos un par de ejemplos. Para esto imaginemos el siguiente árbol de directorios.

my-app/
├─ main.py
├─ models/
├─ settings/
│  ├─ database.py
│  ├─ conf.cnf

Comencemos eliminando las carpetas del sistema, tanto models (carpeta vacía) como settings (carpeta con sub directorios).

import shutil

shutil.rmtree('mddel')
shutil.rmtree('settings')

Si ejecutamos y no obtenemos ningún tipo de salida, esto quiere decir que los directorios fueron eliminados de forma exitosa.

Podemos confirmar esto haciendo un barrido sobre todos los directorios de donde nos encontramos.

from pathlib import Path

for dir in Path.cwd().iterdir():
    print(dir.name)

En mi caso obtengo como salida:

Ahora, quizás te estés preguntado, ya sabemos eliminar carpetas, pero cómo eliminados archivos, bueno para ello tenemos 2 opciones, podemos hacer uso del módulo os o del módulo pathlib. En lo personal recomiendo siempre el módulo pathlib sobre os, sin embargo para fines prácticos veamos ambos escenarios.

import os
os.remove('main.py')
from pathlib import Path
Path('main.py').unlink()

En ambos casos el archivo será eliminado de forma permanente del sistema.


¿El contenido te resulto de ayuda?

Para poder dejar tu opinión es necesario ser un usuario autenticado. Login

Más Tips y Ejercicios 🐍

Adquiere una subscripción PyWombat por tan solo $3 USD. al mes.

Conoce los beneficios de ser usuario premium:
Niveles desbloqueados: Ten accesos a todos los niveles de ejercicios. 🔓
Nuevo límite: Incrementa tu límite de ejercicios por semana. 🚀
Contenido único: Recibe semanalmente recursos exclusivos de Python (Videos, Artículos y Capitulos del libro PyWombat, comienza como desarrollador Python. 🐍