Pathlib en Python: rutas y archivos de forma moderna

Actualizado el: 11/07/2026
Tempo de leitura: 3 minutos
Manipulação moderna de arquivos usando pathlib em Python

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.

Compartilhe:

Facebook
WhatsApp
Twitter
LinkedIn

Contenido del artículo

    Artículos relacionados

    Instalação offline de pacotes Python sem internet
    Bibliotecas y Módulos
    Foto de perfil de Leandro Hirt da Academify

    Cómo instalar paquetes de Python sin conexión a Internet

    Aprende a instalar paquetes de Python sin Internet con pip download, ruedas, requirements.txt, --no-index, hashes y repositorios internos.

    Ler mais

    Tempo de leitura: 5 minutos
    11/07/2026
    Como acelerar código Python usando lru cache
    Bibliotecas y Módulos
    Foto de perfil de Leandro Hirt da Academify

    lru_cache en Python: acelera funciones con caché

    Aprende lru_cache en Python: memoización, maxsize, cache_info, cache_clear, argumentos hashables, recursión y errores frecuentes.

    Ler mais

    Tempo de leitura: 5 minutos
    11/07/2026
    Uso do módulo random para gerar valores aleatórios em Python
    Bibliotecas y Módulos
    Foto de perfil de Leandro Hirt da Academify

    Módulo random en Python: guía práctica para principiantes

    Aprende el módulo random en Python: enteros, decimales, choice, sample, shuffle, seeds, distribuciones y diferencias con secrets.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Uso do módulo collections para estruturas avançadas em Python
    Bibliotecas y Módulos
    Foto de perfil de Leandro Hirt da Academify

    Módulo collections en Python: deque, Counter y más

    Aprende collections en Python con Counter, defaultdict, deque, namedtuple, ChainMap y buenas prácticas para elegir estructuras eficientes.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Introdução ao módulo itertools para iniciantes em Python
    Bibliotecas y Módulos
    Foto de perfil de Leandro Hirt da Academify

    itertools en Python: guía práctica para iterar mejor

    Aprende itertools en Python con count, cycle, chain, islice, combinations, product, groupby, tee y zip_longest.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Manipulação de arquivos e pastas usando módulo os em Python
    Bibliotecas y Módulos
    Foto de perfil de Leandro Hirt da Academify

    Módulo os en Python: archivos, carpetas y entorno

    Aprende el módulo os en Python para listar, crear, renombrar y eliminar archivos, recorrer carpetas, manejar rutas y leer variables

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026