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.

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,
pathlibes 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 nombres →
pathlibes más legible y mantenible. - Variables de entorno / procesos / permisos / funciones OS → dominio de
os.
El patrón óptimo es:
- Llevar las rutas con
Pathhasta el final. - Cuando se necesite interactuar con el entorno OS, usar
os.
7. Resumen
pathlibmejora la legibilidad y estabilidad del código que trabaja con el sistema de archivos.oscontrola 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:
No hay comentarios.