El proceso de borrar una carpeta cuando aprendes a programar en diferentes lenguajes de programación siempre tiene un denominador común, que son las carpetas con contenido en ellas. Es por ello que hoy vamos a ver cómo podemos borrar carpetas de forma recursiva en Python.
Borrar una carpeta en Python
Pero, lo primero, es saber lo más sencillo: ¿cómo borro una carpeta en Python? Pues para ello vamos a recurrir al módulo os
, sí, ese que tiene las funciones que nos permiten manejar el sistema operativo y los ficheros que lo componen. Por ejemplo, tenemos borrado de ficheros, borrado de directorios, listar directorios,…
En concreto, la función que nos permite borrar una carpeta es rmdir()
. La función rmdir()
recibe como parámetro la carpeta que queremos borrar, según podemos ver en su sintaxis:
os.rmdir(path, *, dir_fd=None)
Así que podemos borrar una carpeta con el siguiente código en Python:
carpeta = "/micarpeta/borrar" rmdir(carpeta)
Pero llegamos al caso en el cual, si el directorio contiene elementos, no se puede borrar y nos encontraremos el siguiente error OSError en consola:
OSError: [Errno 66] Directory not empty: 'directorio/borrar'
Eliminar el contenido de una carpeta antes de borrarla.
Visto lo visto, tendremos que eliminar el contenido de la carpeta antes de poder borrarla. Así que deberemos listar el contenido de la carpeta mediante la función listdir()
del módulo os
.
La función listdir()
nos devuelve una lista con todos los ficheros y directorios de un directorio en concreto, tal y como podemos ver en el siguiente código:
for fichero in listdir(carpeta): remove(fichero) print (f"Borrado el fichero {fichero}")
Vemos en nuestro código en Python que por cada fichero podemos borrarlo mediante la función remove()
pasando el nombre del fichero como parámetro.
Pero, ¿esto funciona si es una carpeta? Pues no, para las carpetas tenemos que volver a utilizar la llamada a la función rmdir()
. Así que tendremos que ver en el listado de ficheros si es un fichero para eliminarlo mediante remove()
o si es una carpeta y tenemos que eliminarla en un nuevo proceso.
Si necesitas ver más el detalle el proceso, no dejes de leerte el artículo de Listar un directorio en Python.
carpeta = "/micarpeta/borrar" for fichero in listdir(carpeta): fichero = path.join(carpeta,fichero) if path.isdir(fichero): borrar_carpeta(fichero) else: remove(fichero) print (f"Borrado el fichero {fichero}")
Nos vamos a apoyar en la función isdir()
del módulo os.path
para saber si la entrada en el directorio es un fichero o una carpeta. Vemos que si es una carpeta tenemos que repetir el proceso y por eso llamamos a la función, borrar_carpeta()
que es la que nos ayudará a borrar carpetas de forma recursiva en Python.
Además, hemos visto que utilizamos otra función del módulo os.path
que es .join()
. La función .join()
nos permite crear el path completo entre el nombre de la carpeta o path y el nombre del fichero que estamos listando.
Función para borrar carpetas de forma recursiva en Python.
Ahora ya nos centramos en la función para borrar carpetas de forma recursiva en Python. Que es esa que hemos visto en el código que hemos llamado borrar_carpeta()
.
def borrar_carpeta(carpeta): if (path.exists(carpeta)): for fichero in listdir(carpeta): fichero = path.join(carpeta,fichero) if path.isdir(fichero): borrar_carpeta(fichero) else: remove(fichero) print (f"Borrado el fichero {fichero}") rmdir(carpeta) print (f"Borrada la carpeta {carpeta}") else: print ("La carpeta a borrar no existe")
Lo que vemos es que hemos añadido el código que recorre todos los elementos y los va borrando. Si es una carpeta, la llama de forma recursiva y al final del método que es cuando la carpeta está ya realmente vacía, es cuando llamamos a la función rmdir()
que nos borra la carpeta.
Ya solo nos quedará el invocar por primera vez a esta función pasándole la carpeta base desde la que queremos realizar el borrado.
carpeta = "temp/borrar" borrar_carpeta(carpeta)
Ya habremos conseguido tener por completo nuestro código sobre borrar carpetas de forma recursiva en Python.
Borrar carpetas de forma recursiva en Python con el módulo shutil
Hay que decir que este código es muy útil para realizar un proceso para borrar carpetas de forma recursiva en Python. Pero a la hora de la verdad no tiene sentido que metamos este código en Python dentro de nuestro programa, sobre todo porque ya hay módulos que lo tienen implementado internamente.
Y esto es cuando hablamos del módulo, shutil
que es una biblioteca estándar que proporciona una colección de funciones para realizar operaciones de alto nivel con archivos y directorios. Estas operaciones incluyen copiar, mover, renombrar, eliminar archivos y carpetas, así como trabajar con árboles de directorios. Es especialmente útil para gestionar el sistema de archivos de manera más cómoda y eficiente.
En este caso lo que hacemos es importar el módulo shutil
.
import shutil
E invocar a su función rmtree()
. La función rmtree()
nos permite realizar directamente un borrado recursivo.
carpeta = "temp/borrar" shutil.rmtree(carpeta)
Cómo podemos ver, el uso de la función rmtree()
del módulo shutil
es lo más sencillo para poder borrar carpetas de forma recursiva en Python.