# Dominando el sistema de archivos y el entorno OS: pathlib vs os > **Serie 02 – Manipulando carpetas y archivos con Python** Al crear programas, es inevitable generar archivos, mover carpetas y verificar rutas. En Python, existen dos “respuestas” para ello. El elegante **`pathlib`** para manejar rutas, y el módulo **`os`** que controla el propio entorno del sistema operativo donde se ejecuta el programa. ![Encuentro de máquina y digital](/media/editor_temp/6/dde8bc58-b467-4fe2-9370-24899d41a7bd.png) Si `pathlib` es la estrella de la manipulación de rutas, `os` es el director de escena que gestiona luces, sonido y puertas. En lugar de descartar uno, lo mejor es usarlos juntos según su función. --- ## 1. ¿Qué diferencia hay entre os y pathlib? {#sec-92641994f71a} Desde Python 3.4, `pathlib` mejoró significativamente la forma de tratar rutas. * **`os` / `os.path`** * Maneja rutas como **cadenas**. * Estilo funcional: al encadenar muchas operaciones, aparecen llamadas como `os.path.join()`, `basename()`, `splitext()`. * Además de rutas, cubre funciones del OS (variables de entorno, procesos, permisos, etc.). * **`pathlib`** * Trata rutas como **objetos (`Path`)**. * Con el operador `/` y encadenamiento de métodos, el código es más corto e intuitivo. * Para tareas de “ruta”, como búsqueda de archivos o manejo de extensiones, `pathlib` es más cómodo. --- ## 2. Comparación de código por tareas esenciales {#sec-273fe3d2efe4} ### 2.1 Verificar directorio actual y crear carpeta {#sec-707744fc63d4} ```python import os from pathlib import Path # Método os current_os = os.getcwd() if not os.path.exists("test_os"): os.makedirs("test_os") # Método pathlib current_pl = Path.cwd() Path("test_pl").mkdir(exist_ok=True) ``` Consejo: cuando el código muestra muchas rutas, `pathlib` facilita el mantenimiento. --- ### 2.2 Concatenar rutas (donde la diferencia es más evidente) {#sec-55f0047ba895} ```python import os from pathlib import Path # Método os path_os = os.path.join("usr", "bin", "python") # Método pathlib (operador slash) path_pl = Path("usr") / "bin" / "python" ``` A medida que se concatenan más rutas, `pathlib` resulta más legible. --- ## 3. Por qué se recomienda pathlib: el poder del “objeto ruta” {#sec-a7e299456c6e} Las ventajas de `pathlib` no terminan en la concatenación. Al extraer información de archivos, la diferencia se vuelve más marcada. | Función | `os.path` | `pathlib` | |---|---|---| | Extraer nombre de archivo | `os.path.basename(p)` | `p.name` | | Nombre sin extensión | `os.path.splitext(os.path.basename(p))[0]` | `p.stem` | | Obtener extensión | `os.path.splitext(p)[1]` | `p.suffix` | | Directorio padre | `os.path.dirname(p)` | `p.parent` | Estas pequeñas operaciones se acumulan; unificar con `pathlib` hace que el código del equipo sea mucho más limpio. --- ## 4. Ejemplo práctico: encontrar todos los archivos con una extensión específica {#sec-1313166407f5} Busquemos solo archivos `.txt` dentro de la carpeta del proyecto. ```python from pathlib import Path base_path = Path.cwd() txt_files = list(base_path.rglob("*.txt")) # búsqueda recursiva for file in txt_files: print(f"Archivo: {file.name}, Ruta absoluta: {file.resolve()}") ``` Con `rglob()` se completa la búsqueda recursiva. `pathlib` es realmente potente para “buscar archivos”. --- ## 5. Pero os tiene su propio dominio fuerte: el control del entorno OS {#sec-42d7841b5743} Aquí es donde se encuentra el equilibrio. **`pathlib`** es un experto en rutas, pero **`os`** es el maestro del propio sistema operativo. ### 5.1 Leer/escribir variables de entorno (clave para despliegue, seguridad y configuración) {#sec-bc07d2294385} A medida que los entornos de desarrollo y producción cambian, las configuraciones se separan a menudo en variables de entorno. ```python import os # Lectura url_db = os.environ.get("DATABASE_URL", "sqlite:///local.db") # Escritura (normalmente solo para el proceso actual) os.environ["APP_ENV"] = "production" ``` Ejemplos: claves API, modo de ejecución, nivel de log, banderas de características. Todo esto pertenece al dominio de `os`, no de `pathlib`. --- ### 5.2 Ejecutar procesos/comandos: “pedirle trabajo al OS” {#sec-be8e97bf9b7c} Ejecutar comandos externos o manejar procesos es, en última instancia, una función del OS. `os` ofrece una interfaz de bajo nivel, aunque en la práctica se prefiere `subprocess` para tareas de ejecución. ```python import os # Ejecución simple (retorna código de salida) exit_code = os.system("echo hello") print(exit_code) ``` También existen funciones más finas para control de procesos (ejecución, reemplazo, bifurcación). Estas están fuera del alcance de `pathlib`. --- ### 5.3 Gestionar permisos, usuarios y directorios de trabajo {#sec-3b5ac9f93cf3} * Cambiar permisos (Unix): `os.chmod()` * Cambiar directorio de trabajo: `os.chdir()` * Información de proceso/usuario: `os.getpid()` y similares Estas capacidades no pueden ser sustituidas por `pathlib`. Es el dominio exclusivo de `os`. --- ## 6. Conclusión: asignar roles a pathlib y os {#sec-a1f526df17df} * **Manipulación de rutas / búsqueda de archivos / procesamiento de nombres** → `pathlib` es más legible y mantenible. * **Variables de entorno / procesos / permisos / funciones OS** → dominio de `os`. El patrón óptimo es: * Llevar las rutas con `Path` hasta el final. * Cuando se necesite interactuar con el entorno OS, usar `os`. --- ## 7. Resumen {#sec-94950e4d35ef} * `pathlib` mejora la **legibilidad y estabilidad** del código que trabaja con el sistema de archivos. * `os` controla el **entorno del sistema operativo** más allá de las rutas. * La respuesta correcta no es elegir uno, sino combinar **`pathlib + os`**. **Resumen en una línea**: las tareas de ruta/archivo se hacen con `pathlib`, el control del entorno OS con `os`. --- **Enlaces relacionados**: - [[Biblioteca estándar de Python - 0] ¿Qué es la biblioteca estándar de Python? Guía para principiantes](/ko/whitedec/2026/1/29/python-standard-library/) - [Conquista de la biblioteca estándar de Python 3 - pathlib](/ko/whitedec/2025/5/8/python-standard-library-pathlib/)