Pathlib en Python permite trabajar con rutas, archivos y carpetas mediante objetos. Su sintaxis es más clara que concatenar strings y funciona de forma portable en Windows, macOS y Linux.
El módulo forma parte de la biblioteca estándar. Puedes utilizarlo para crear rutas, comprobar si un archivo existe, leer y escribir texto, recorrer directorios, filtrar extensiones, renombrar elementos y construir automatizaciones seguras.
Crear objetos Path
from pathlib import Path
current_folder = Path.cwd()
home_folder = Path.home()
print(current_folder)
print(home_folder)Path.cwd() devuelve el directorio de trabajo del proceso. Path.home() devuelve la carpeta personal del usuario.
La documentación oficial de pathlib describe sus clases, métodos y comportamientos.
Combinar rutas
El operador / añade componentes:
base = Path.home() / "Documents"
report = base / "reports" / "summary.txt"
print(report)Python utiliza el separador adecuado para el sistema operativo. Esto evita escribir manualmente barras o utilizar concatenaciones frágiles.
Para comparar el enfoque tradicional, consulta la guía del módulo os en Python.
Analizar las partes de una ruta
path = Path("data/archive/report.csv")
print(path.name)
print(path.stem)
print(path.suffix)
print(path.parent)
print(path.parts)name: nombre completo del archivo.stem: nombre sin la última extensión.suffix: última extensión.suffixes: todas las extensiones.parent: carpeta superior.parts: componentes de la ruta.
Rutas absolutas y relativas
relative = Path("data/report.csv")
absolute = relative.resolve()
print(relative.is_absolute())
print(absolute)Una ruta relativa se interpreta desde el directorio de trabajo, que no siempre coincide con la carpeta del script. Para recursos del proyecto:
BASE_DIR = Path(__file__).resolve().parent
CONFIG_PATH = BASE_DIR / "config" / "settings.json"Comprobar existencia y tipo
path = Path("data/report.csv")
print(path.exists())
print(path.is_file())
print(path.is_dir())Una comprobación previa mejora los mensajes, pero el archivo puede cambiar inmediatamente después. Maneja también excepciones como FileNotFoundError y PermissionError. La guía de try y except en Python explica cómo capturarlas.
Crear directorios
output = Path("reports/2026/july")
output.mkdir(parents=True, exist_ok=True)parents=True crea las carpetas intermedias. exist_ok=True evita un error si el directorio ya existe.
Leer y escribir texto
notes = Path("notes.txt")
notes.write_text(
"Primera línea\nSegunda línea\n",
encoding="utf-8",
)
content = notes.read_text(encoding="utf-8")
print(content)read_text() carga todo el archivo. Para archivos grandes, abre y recorre líneas:
with notes.open(encoding="utf-8") as file:
for line_number, line in enumerate(file, start=1):
print(line_number, line.rstrip())La guía de archivos de texto en Python explica modos, codificación y procesamiento progresivo.
Trabajar con bytes
binary_path = Path("sample.bin")
binary_path.write_bytes(
b"\x00\x01\x02"
)
data = binary_path.read_bytes()
print(data)Los métodos de bytes son útiles para archivos pequeños. Para imágenes o documentos grandes, utiliza open("rb") y procesa por bloques.
Listar una carpeta
folder = Path("downloads")
for item in folder.iterdir():
if item.is_file():
print("Archivo:", item.name)
elif item.is_dir():
print("Carpeta:", item.name)iterdir() no garantiza un orden específico. Utiliza sorted() cuando el orden importe.
Buscar con glob y rglob
for csv_file in Path("data").glob("*.csv"):
print(csv_file)
for image in Path("assets").rglob("*.png"):
print(image)glob() busca en una carpeta y rglob() recorre subdirectorios. Puedes combinar extensiones:
allowed = {".jpg", ".jpeg", ".png"}
images = [
path
for path in Path("assets").rglob("*")
if path.is_file()
and path.suffix.casefold() in allowed
]La guía de list comprehensions en Python explica filtros y transformaciones.
Renombrar y mover archivos
source = Path("draft.txt")
destination = source.with_name("final.txt")
source.rename(destination)Para cambiar la extensión:
old_path = Path("report.txt")
new_path = old_path.with_suffix(".csv")rename() puede mover dentro del mismo sistema de archivos. Para copias y movimientos más complejos, utiliza shutil.
Copiar y mover con shutil
from pathlib import Path
import shutil
source = Path("report.csv")
backup = Path("backups") / source.name
backup.parent.mkdir(exist_ok=True)
shutil.copy2(source, backup)copy2() intenta conservar metadatos. La documentación oficial de shutil cubre copia, movimiento, archivado y eliminación recursiva.
Eliminar archivos y directorios vacíos
temporary = Path("temporary.txt")
temporary.unlink(missing_ok=True)
empty_folder = Path("old_folder")
if empty_folder.exists():
empty_folder.rmdir()rmdir() elimina únicamente directorios vacíos. No utilices eliminación recursiva sin validar cuidadosamente la ruta.
Metadatos
from datetime import datetime
path = Path("report.csv")
stats = path.stat()
print(stats.st_size)
print(datetime.fromtimestamp(stats.st_mtime))La guía de datetime en Python explica fechas, formatos y conversiones.
Rutas de Windows sin errores
Pathlib evita escribir manualmente separadores:
path = Path("C:/Users/Ava/Documents/report.txt")También puedes representar una ruta de Windows como raw string:
from pathlib import PureWindowsPath
path = PureWindowsPath(
r"C:\Users\Ava\Documents\report.txt"
)
print(path.parent)Las clases PurePath manipulan sintaxis sin acceder al disco, lo que resulta útil para procesar rutas de otro sistema.
Ejemplo: organizar descargas
from pathlib import Path
import shutil
source = Path.home() / "Downloads"
categories = {
".pdf": "documents",
".docx": "documents",
".csv": "data",
".xlsx": "data",
".jpg": "images",
".png": "images",
}
for path in source.iterdir():
if not path.is_file():
continue
folder_name = categories.get(
path.suffix.casefold(),
"other",
)
target_folder = source / folder_name
target_folder.mkdir(exist_ok=True)
destination = target_folder / path.name
if destination.exists():
print("Omitido:", destination)
continue
shutil.move(path, destination)La guía de automatización con Python explica simulación, logs, copias de seguridad y recuperación.
Escritura atómica sencilla
Para reducir el riesgo de dejar un archivo incompleto, escribe primero en un temporal y reemplaza al final:
final_path = Path("settings.json")
temporary_path = final_path.with_suffix(".tmp")
temporary_path.write_text(
'{"theme": "dark"}',
encoding="utf-8",
)
temporary_path.replace(final_path)Errores frecuentes
- Confundir el directorio actual con la carpeta del script.
- Leer archivos enormes con
read_text(). - Eliminar o reemplazar sin validar el destino.
- Olvidar la codificación UTF-8.
- Suponer que
glob()devuelve solamente archivos. - Convertir a string demasiado pronto y perder los métodos de Path.
- Confiar en una comprobación de existencia como garantía permanente.
Conclusión
Pathlib proporciona una interfaz coherente para rutas y archivos. Domina el operador /, mkdir(), iterdir(), glob(), lectura, escritura, renombrado y metadatos. Combina estas herramientas con excepciones, logs y copias antes de automatizar operaciones destructivas.






