Script de Python: ¿Cómo crear una estructura de directorios de forma automática?
Quiero aprovecharme de las ventajas que ofrece Python y compartir un pequeño “tip” o más bien script, que nos servirá para crear estructuras de directorios y archivos de forma automática.
Evidentemente esto es útil cuando necesitamos replicar una estructura compleja de carpetas y archivos para no tener que hacerlo manualmente.
En mi caso, muchas veces desarrollando en PHP, me veo en la necesidad de crear varios proyectos (aunque sean de prueba) con el mismo tipo de estructura de directorios o similar, por eso, antes lo hacía todo a mano, hasta que “me iluminé” y dije, ¿por qué no usar Python?
Su uso es bastante sencillo, se trata de usar diccionarios, el modulo ‘os’ y algunas funciones de Python. Con todo eso, crearemos automáticamente una estructura “de proyecto”,con sus carpetas y archivos en el directorio base que elijamos.
¡Empecemos!
Lo primero es definir la estructura que queremos. A modo de ejemplo y para no hacerlo tan extenso, supongamos que queremos crear la siguiente estructura:
carpeta1/ subcarpeta/ archivo.js otroArchivo.php subcarpeta2/ otroMas.html otraSubCarpeta/ carpeta2/ subcarpeta/ config.php otraMas/ otroEjemplo.env yOtro.ini unArchivo.php otro.txt
Para ello creamos primero un diccionario de la siguiente manera:
structure = { "carpeta1": { "subcarpeta": { "archivo.js": None, "otroArchivo.php": None }, "subcarpeta2": { "otroMas.html": None }, "otraSubCarpeta" : {} # vacia, sin archivos }, "carpeta2": { "subcarpeta": { "config.php": None }, "otraMas": { "otroEjemplo.env": None, "yOtro.ini": None } }, "unArchivo.php": None, "otro.txt" : None }
Y luego el código o la función que hará “la magía”:
import os def create_structure(base_path, structure): for name, content in structure.items(): path = os.path.join(base_path, name) if isinstance(content, dict): # Es un directorio, crearlo y proceder recursivamente os.makedirs(path, exist_ok=True) create_structure(path, content) else: # Es un archivo, crearlo with open(path, 'w') as file: pass # Crear el archivo vacío # Ruta base donde quieres crear la estructura base_path = r"C:\ruta\al\directorio\ejemplo" # Crear la estructura create_structure(base_path, structure)
Explicación del código:
Primero: Definimos la estructura que queremos crear mediante un diccionario, donde las llaves son nombres de carpetas o archivos. Si un valor asociado a una llave es otro diccionario, significa que es una carpeta que contiene más elementos dentro. Si el valor es None, significa que es un archivo.
Segundo: Importamos el módulo os, el cual nos facilita funciones para trabajar con el sistema de archivos, como en nuestro caso, crear carpetas.
Tercero: Creamos la función create_structure con dos parámetros: base_path (ruta donde se va a crear la estructura) y structure (diccionario que define la estructura).
El funcionamiento de la función es simple:
- Si el elemento es un diccionario (es decir, una carpeta), se crea la carpeta usando os.makedirs() y luego se llama recursivamente a la función para crear el contenido de esa carpeta.
Concretamente, os.makedirs(path, exist_ok=True), crea la carpeta especificada en path. Si la carpeta ya existe, no hace nada (gracias al argumento exist_ok=True).
- Si el elemento no es un diccionario (es decir, es un archivo), se crea un archivo vacío con el nombre especificado usando open() en modo de escritura (‘w’).
Con open(path, ‘w’), abrimos un archivo en la ruta path en modo de escritura. Si el archivo no existe, lo crea. Luego, el pass dentro del bloque with, asegura que no se escribe nada en el archivo dejándolo vacío.
Por último y para finalizar, ejecutas la función pasándole la ruta base y el diccionario de estructura como parámetros.
Como has observador, este código es útil para crear estructuras de directorios y archivos de manera automatizada. Puedes adaptarlo según tus necesidades para crear cualquier estructura que necesites. Simplemente modifica el diccionario que define la estructura, elije una ruta y listo.
Espero que te sea útil 😉