Curso de Python / Gestionar rutas de archivos y carpetas con pathlib

pathlib.Path representa rutas de archivos y las combina según las reglas del sistema operativo. Una ruta relativa se interpreta desde la carpeta de trabajo actual, que puede ser distinta de la carpeta donde guardaste el script.

Construir rutas sin unir separadores manualmente

Path("data") / "expenses.csv" combina los componentes sin insertar manualmente barras inversas de Windows o separadores propios de otra plataforma. Crear un objeto Path no crea un archivo: representa la ruta que utilizarás en una operación posterior.

Path.cwd() muestra la carpeta de trabajo. En un script, Path(__file__).resolve().parent permite identificar la carpeta que contiene ese archivo; en un entorno interactivo puede no existir __file__. Elige el directorio base como parte del contrato del programa en lugar de asumir que ambas ubicaciones son iguales.

La referencia de pathlib describe sus operaciones. La lectura y escritura de texto utiliza estas rutas para abrir archivos concretos.

Crear e inspeccionar un archivo de práctica

Utiliza una carpeta nueva de práctica. El ejemplo escribe lab-data/expenses.csv y sustituye su contenido si ese archivo ya existe. No lo ejecutes sobre un archivo que necesites conservar.

Guarda este programa como paths.py en UTF-8 y ejecuta python paths.py desde esa carpeta con el entorno del proyecto seleccionado. En macOS o Ubuntu, fuera del entorno, utiliza python3 si corresponde a tu intérprete.

from pathlib import Path

base = Path("lab-data")
base.mkdir(exist_ok=True)
path = base / "expenses.csv"
path.write_text("name,amount\nlunch,8000\n", encoding="utf-8")
print(path.name, path.suffix, path.stem)
print(path.is_file(), base.is_dir())
print(sorted(p.name for p in base.glob("*.csv")))

La salida esperada es:

expenses.csv .csv expenses
True True
['expenses.csv']

name contiene el nombre completo del archivo, suffix su extensión y stem el nombre sin esa extensión. Las comprobaciones distinguen un archivo de una carpeta y la búsqueda encuentra los CSV del directorio indicado.

Entender búsquedas, existencia y concurrencia

glob("*.csv") busca en la carpeta indicada; rglob("*.csv") incluye subcarpetas. Si solo aceptas archivos, filtra con is_file(). Ordena los resultados cuando la presentación o las pruebas necesiten un orden estable.

La ruta puede cambiar entre una comprobación exists() y la operación real. Comprobar la existencia ayuda a explicar una situación, pero no elimina errores de permisos, cambios concurrentes ni fallos de disco. Las escrituras importantes siguen necesitando manejo de errores y una política de sustitución.

Por ejemplo, al ejecutar python C:/work/demo/script.py desde otra carpeta, Path("out.txt") apunta a esa otra carpeta. Si el archivo debe vivir junto al código, utiliza una base explícita como Path(__file__).resolve().parent / "out.txt". Muestra el destino resuelto antes de escribir.

Comparar ubicaciones y delimitar rutas externas

  1. Cambia el nombre del CSV y compara name, stem y suffix.
  2. Ejecuta el script desde otra carpeta de práctica y localiza el nuevo directorio lab-data.
  3. Abre el CSV generado y comprueba su cabecera y su registro. Resuelve la ruta absoluta antes de borrar únicamente los archivos desechables del ejercicio.

Con rutas proporcionadas externamente, considera los accesos a carpetas superiores, las rutas absolutas y los enlaces simbólicos. Comparar prefijos de cadenas no basta para demostrar que un destino resuelto permanece dentro de un directorio permitido. Las operaciones de archivos por lotes aplican comprobaciones de alcance antes de modificar archivos.