Código fuente en Python de una herramienta de línea de comandos que permite eliminar carpetas completas en Windows y Linux. Esta herramienta agiliza considerablemente la eliminación de carpetas en Windows, en lugar de usar el propio eliminar de Explorador de archivos, que puede resultar lentísimo en carpetas con muchas subcarpetas y ficheros.
- Código fuente en Python de herramienta para eliminar carpetas completas.
- Generar ejecutable portable del script Python eliminar_carpetas.py a eliminar_carpetas.exe.
- Ejemplo de ejecución del programa Python para eliminar carpetas en Windows y Linux.
- Descarga del código fuente y del ejecutable para Windows y para Linux.
Código fuente en Python de herramienta para eliminar carpetas completas
El código del script Python para eliminar carpetas completas será:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
# ProyectoA.com Aplicación Python para eliminar el contenido de una carpeta completo (subcarpetas y ficheros) # Versión 1.0 import argparse import os import shutil # Mostrar y preparar los argumentos que admite el programa por la línea de comandos def MostrarArgumentos(): # Iniciamos el programa, obteniendo los argumentos pasados por la línea de comandos parser = argparse.ArgumentParser() parser.add_argument("-r", "--rutacarpeta", type=str, required=True, help="Ruta de la carpeta que se eliminará. Se eliminará todo su contenido: subcarpetas y ficheros") parser.add_argument("-nc", "--noconfirmacion", action="store_true", required=False, help="No pedir confirmación para eliminar la carpeta y todo su contenido") parser.add_argument("-v", "--verbose", action="store_true", required=False, help="Muestra todos los ficheros que va eliminando") parser.add_argument("-ve", "--verboseerrores", action="store_true", required=False, help="Muestra también los posibles errores que se produzcan en la eliminación de cada fichero") parser.add_argument("-vn", "--verbosenumero", action="store_true", required=False, help="Muestra el número de ficheros y carpetas eliminadas y el número de posibles errores") return parser.parse_args() # Establecemos permisos complmetos para la carpeta y la eliminamos # Devolverá True si la carpeta se ha eliminado correctamente # Si se ha producido algun error, devolverá False y el mensaje del error en una tupla def EliminarCarpeta(ruta): try: os.chmod(ruta, 0o777) shutil.rmtree(ruta) return True, "" except Exception as ex: return False, getattr(ex, 'message', str(ex)) # Eliminar la carpeta indicada y todo su contenido # Devuelve un diccionario con: número de carpetas eliminadas, número de ficheros eliminados, # número de errores de ficheros, número de errores de carpetas def EliminarCarpetaCompleta(carpeta, verbose, verboseerrores): # Definimos el diccionario que devolverá el resumen del resultado resultado = {"FicherosEliminados": 0, "CarpetasEliminadas": 0, "ErroresFicheros": 0, "ErroresCarpetas": 0} # Comprobamos primero si existe la carpeta a eliminar if os.path.exists(carpeta): numFicherosEliminados = 0 numCarpetasEliminadas = 0 numErroresFichero = 0 numErroresCarpeta = 0 # Obtenemos todos las subcarpetas que pueda contener la carpeta a eliminar for rutaRaiz, carpetas, ficheros in os.walk(carpeta, topdown=False): # Obtenemos los ficheros de la carpeta actual y subcarpetas y los eliminamos for fichero in ficheros: ruta = os.path.join(rutaRaiz, fichero) try: # Eliminamos el fichero os.remove(ruta) numFicherosEliminados = numFicherosEliminados + 1 if verbose: print("{0} [ELIMINADO]".format(ruta)) except Exception as ex: numErroresFichero = numErroresFichero + 1 if verboseerrores: print("[ERROR] {0} [{1}]".format(ruta, getattr(ex, 'message', str(ex)))) # Obtenemos las carpetas y subcarpetas y las eliminamos (no deben tener ficheros) for carpeta in carpetas: ruta = os.path.join(rutaRaiz, carpeta) try: #os.rmdir(ruta) resultado = EliminarCarpeta(ruta) if resultado[0] == True: numCarpetasEliminadas = numCarpetasEliminadas + 1 if verbose: print("{0} [ELIMINADA]".format(ruta)) else: numErroresCarpeta = numErroresCarpeta + 1 if verboseerrores: print("[ERROR] {0} [{1}]".format(ruta, resultado[1])) except Exception as ex: numErroresCarpeta = numErroresCarpeta + 1 if verboseerrores: print("[ERROR] {0} [{1}]".format(ruta, getattr(ex, 'message', str(ex)))) resultado = {"FicherosEliminados": numFicherosEliminados, "CarpetasEliminadas": numCarpetasEliminadas, "ErroresFicheros": numErroresFichero, "ErroresCarpetas": numErroresCarpeta} else: print("No existe la carpeta {0}".format(carpeta)) return resultado # Procedimiento que ejecuta el resto de procedimientos para iniciar el programa def IniciarPrograma(): # Preparamos y mostramos los argumentos (si se indica) args = MostrarArgumentos() carpeta = args.rutacarpeta verbose = False verboseerrores = False if args.verbose: verbose = True if args.verboseerrores: verboseerrores = True noConfirmacion = False continuar = True if args.noconfirmacion: noConfirmacion = True if not noConfirmacion: respuesta = input("¿Desea continuar? Se eliminará TODO el contenido de la carpeta (S/N) ".format(carpeta)) if respuesta.upper() == "S": continuar = True else: continuar = False if continuar: # Eliminamos la carpeta completa y su contenido resultado = EliminarCarpetaCompleta(carpeta, verbose, verboseerrores) if args.verbosenumero: print("+ Número de ficheros eliminados: {0}\n+ Número de carpetas eliminadas: {1}\n+ Número de errores de ficheros: {2}\n+ Número de errores de carpeta: {3}".format( resultado["FicherosEliminados"], resultado["CarpetasEliminadas"], resultado["ErroresFicheros"], resultado["ErroresCarpetas"])) # Iniciamos el programa IniciarPrograma() |
Las opciones que admite el programa Python pasadas por argumento en la línea de comandos:
- «-r», «–rutacarpeta»: ruta de la carpeta que se eliminará. ATENCIÓN: se eliminará todo su contenido: subcarpetas y ficheros.
- «-nc», «–noconfirmacion»: no pedir confirmación para eliminar la carpeta y todo su contenido.
- «-v», «–verbose»: muestra todos los ficheros y carpetas que va eliminando.
- «-ve», «–verboseerrores»: muestra los posibles errores que se produzcan en la eliminación de cada fichero o carpeta.
- «-vn», «–verbosenumero»: muestra el número de ficheros y carpetas eliminadas y el número de posibles errores.
Generar ejecutable portable del script Python eliminar_carpetas.py a eliminar_carpetas.exe
Copiando el código Python anterior a un fichero llamado eliminar_carpetas.py, podremos generar el ejecutable tanto para Linux como para Windows, como indicamos en este tutorial:
El proceso es el mismo para Linux que para Windows. En Linux generará un fichero ejecutable propio y en Windows generará un .exe. En el caso de Windows, hemos generado el fichero eliminar_carpetas.exe portable con el siguiente comando (estando en la carpeta que contiene el fichero eliminar_carpetas.py:
1 |
pyinstaller.exe .\eliminar_carpetas.py -F |
pyinstaller habrá creado una carpeta con el nombre «dist» y en ella habrá generado el fichero ejecutable portable (no necesita nada para ejecutarse en otros equipos Windows):
En esta sección podréis descargaros tanto el código fuente Python como el ejecutable de esta aplicación de ejemplo.
Ejemplo de ejecución del programa Python para eliminar carpetas en Windows y Linux
Eliminar carpetas en Windows con Python eliminar_carpetas.exe
Para ejecutar el programa eliminar_carpetas.exe en un equipo Windows, únicamente tendremos que transferir el fichero .exe del script, generado como hemos indicando anteriormente y, desde la ventana de línea de comandos (MS-DOS o Símbolo de sistema), nos posicionaremos donde hayamos colocado el eliminar_carpetas.exe, con el comando cd ruta (en nuestro caso el ejecutable está en D:\ProyectoA\Python:
1 |
cd D:\ProyectoA\Python |
Como ejemplo, eliminaremos todo el contenido de la carpeta «Eliminar ejemplo» que está en D:\Carpetas\Python, la ruta completa:
D:\Carpetas\Python\Eliminar ejemplo
Por ello, ejecutaremos el siguiente comando:
1 |
eliminar_carpetas.exe -r "D:\Carpetas\Python\Eliminar ejemplo" -ve -vn |
El comando anterior eliminará el contenido de la carpeta indicada en el parámetro -r y, puesto que le hemos añadido los parámetros -ve y -vn, mostrará sólo los posibles errores y mostrará, al finalizar, un resumen con el número de ficheros eliminados, el número de carpetas eliminadas, el número de errores al eliminar los ficheros y el número de errores al eliminar las carpetas:
Número de ficheros eliminados: 42
Número de carpetas eliminadas: 13
Número de errores de ficheros: 0
Número de errores de carpeta: 0
Puesto que no hemos añadido el parámetro -nc, la aplicación pedirá confirmación para realizar la eliminación.
Deberemos tener mucha precaución con la carpeta que indicamos en el parámetro -r, dado que se eliminará completamente el contenido de la misma.
Si ejecutamos el mismo comando pero añadiendo -v, mostrará el nombre y ruta completa de todos los ficheros y carpetas que va eliminando (no es recomendable usar este parámetro si tenemos muchos ficheros y carpetas). También añadiremos el parámetro -nc, para que no pida confirmación al eliminar (recuerda que la carpeta eliminada no podrá ser recuperada y se eliminará todo su contenido):
1 |
eliminar_carpetas.exe -r "D:\Carpetas\Python\Eliminar ejemplo" -ve -vn -v -nc |
Eliminar carpetas en Linux con Python eliminar_carpetas.py
En el caso de equipos Linux, el comando eliminar_carpetas funciona exactamente igual. Habremos generado el ejecutable, al igual que para Windows, con:
1 |
pyinstaller eliminar_carpetas.py -F |
En el caso de Linux, el fichero ejecutable será eliminar_carpetas:
Para eliminar la carpeta /home/alonso/eliminar_carpetas/dist/prueba eliminación, ejecutaremos el comando:
1 |
./eliminar_carpetas -r "prueba eliminación" -nc -v -ve -vn |
Como vemos, el script Python funciona perfectamente en entornos Windows y en entornos Linux, sin necesidad de modificar ni una sola línea de código.
Descarga del código fuente y del ejecutable para Windows y para Linux
En el siguiente enlace tenéis disponible la descarga tanto del código fuente del script en Python como el ejecutable .exe que funcionará en equipos Windows sin necesidad de instalar nada: