Automatizando Tareas Aburridas con Python (Organizador de Directorios)

Mauricio Matias C.
3 min readFeb 25, 2020
Imagen extraída del libro “Automate the boring stuff with python” de Al Sweigart.

Hola Amigosss! hace mucho que no realizo un post decente, en esta ocasión les traigo un Script para la organización automática de un directorio en particular. ¡Exacto!, nuestro patio trasero conocido como “Descargas” para los cuates o “Downloads” para los friends, u otro que tu elijas. Este post es uno de una serie de posts dedicados a la automatización de tareas aburridas, ¡se vienen más! (quizá otro y ya, 😁 ok no).

Esta idea nació bajo la premisa de despreocuparse por seleccionar y categorizar los archivos en el directorio Descargas, hacerlo de forma manual es ¡Aburrido!.

Y esto es lo que hace (tamboresss 🥁):

Requisitos

  • Python 3 o Mayor 🐍.
  • pip 3, administrador de paquetes de python.
  • virtualenv, si no te gusta ensuciar tu entorno de desarrollo 😛.
  • Paciencia, si en tu caso el script no funciona a la primera, cualquier problema puedes dejar comentarios o abres un issue en github😉.

¿Cómo funciona?

No explicaré todo el trasfondo y cada parte del código, sin embargo, use la biblioteca watchdog de python, que permite escuchar eventos tales como: modificación (modify), eliminación (delete), creación (create) y movición (move)😆 de archivos en un determinado directorio. Una funcionalidad bastante conveniente para nuestro propósito, en dichos eventos participan los archivos (directorios y archivos como tal) de los cuales se capturan los siguientes atributos:

  • src_path: Ruta y nombre del archivo, ejemplo: /path/demo.jpg
  • is_directory: True o False dependiendo si el archivo participante en el evento es o no un directorio.
  • event_type: A que tipo pertenece dicho evento (created, deleted, modified y moved)

El núcleo del Script reside en el json, BASE_STRUCTURE:

BASE_STRUCTURE = {
SOUND_DIR_NAME: ["mp3","wav","wma","m4a","aac","aa"],
VIDEO_DIR_NAME: ["mkv","mp4","mpg","mov","webm","avi","flv","mpeg","ogg","wmv"],
DOCS_DIR_NAME: {
PRESENTATION_DIR_NAME: ["opd","otp","pot","potm","potx","pps","ppsm","ppsx","ppt","pptx","pptm"],
SPREADSHEETS_DIR_NAME: ["xls","csv","dif","ods","xlm","ots"],
DOCUMENTS_DIR_NAME: ["txt","docx","pdf","odt","doc"]
},
IMAGES_DIR_NAME: ["png","jpeg","jpg","gif","tif","tiff","bmp","eps","psd","ai","raw","svg"],
BINARIES_DIR_NAME: ["exe","bin"],
SYSTEMS_DIR_NAME: ["iso","img"],
COMPRESSED_DIR_NAME: ["rar","zip","gz","tar"]
}

En dicho json, se encuentran los nombres de las carpetas que se crearan de forma jerárquica en el directorio objetivo y las extensiones de los tipos de archivos pertenecientes a dicha carpeta (si gustas puedes aumentar algunas extensiones más, es posible que falte alguna).

Con eso, un poco de recursividad (por los directorios) y creatividad en la interpretación de cadenas de texto, es suficiente para entender este Script.

¿Cómo lo uso?

En el repo encontraras el clásico requirements.txt donde se plasman las dependencias del proyecto, las cuales se instalan de la siguiente forma:

pip3 install -r requirements.txt

Lo importante es modificar el atributo PATH (ruta del directorio de descargas) del archivo main.py. En mi caso es:

PATH = "D:/Descargas/"

En tu caso quizá el directorio de descargas este en otro lado, en ese sentido, usa el carácter “/” entre las diferentes rutas y termina con el para que el script funcione correctamente, un ejemplo de un Windows y Linux genérico:

PATH = "C:/Users/TU_USERNAME_AQUI/Downloads/"    # Windows/home/TU_USERNAME_AQUI/Descargas                 # Linux

Para ejecutarlo solo es necesario correr el comando:

python3 main.py

En el archivo README.md se explica a detalle los procesos de instalación.

Repositorio

Este es el repositorio en github, si deseas contribuir al proyecto espero tu pull request.

Hasta el siguiente post 👋 y como últimamente digo:

“Si no consigues la paz ️ 🏳️, al menos consigue el sueño 😴, si no consigues ninguno al menos haz algo útil”

Hacer algo útil no solo implica programar ¡OJO!.

--

--