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 soluciones 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

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?

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

2.1 Verificar directorio actual y crear carpeta

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 maneja muchas rutas, pathlib facilita el mantenimiento.


2.2 Concatenar rutas (donde la diferencia es más evidente)

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”

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

Busquemos solo archivos .txt dentro de la carpeta del proyecto.

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

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)

A medida que los entornos de desarrollo y producción cambian, las configuraciones se separan a menudo en variables de entorno.

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, indicadores de características. Todo esto pertenece al dominio de os, no de pathlib.


5.2 Ejecutar procesos/comandos: “pedirle trabajo al OS”

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.

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 específicas para el 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

  • 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

  • Manipulación de rutas / búsqueda de archivos / procesamiento de nombrespathlib 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

  • 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: