pathlib: gestiona archivos y rutas en Python

Actualizado el: 20/08/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

    Documento y bandeja de entrada que representan buzones de correo con mailbox en Python
    Bibliotecas y Módulos
    Foto de perfil de Leandro Hirt da Academify

    mailbox en Python: buzones de correo

    Aprende mailbox en Python para leer, crear y migrar Maildir, mbox y MH con locking, flags, mensajes y manejo seguro

    Ler mais

    Tempo de leitura: 5 minutos
    12/08/2026
    Editor de texto que representa formato con textwrap en Python
    Bibliotecas y Módulos
    Foto de perfil de Leandro Hirt da Academify

    textwrap en Python: formatea textos

    Aprende textwrap en Python para dividir, rellenar, acortar, indentar y quitar sangrías con control de ancho, espacios y palabras largas.

    Ler mais

    Tempo de leitura: 5 minutos
    10/08/2026
    Carpeta y lupa que representan filtros de nombres con fnmatch en Python
    Bibliotecas y Módulos
    Foto de perfil de Leandro Hirt da Academify

    fnmatch en Python: filtra nombres de archivos

    Aprende fnmatch en Python para filtrar nombres de archivos con comodines, controlar mayúsculas, excluir patrones y distinguir glob de regex.

    Ler mais

    Tempo de leitura: 5 minutos
    10/08/2026
    Monitor con datos binarios que representa arrays numéricos compactos en Python
    Bibliotecas y Módulos
    Foto de perfil de Leandro Hirt da Academify

    array en Python: números compactos

    Aprende array en Python para almacenar números compactos, usar archivos binarios, byte order, memoryview y buffers seguros.

    Ler mais

    Tempo de leitura: 5 minutos
    10/08/2026
    Círculo cromático que representa conversiones RGB, HSV y HLS con colorsys en Python
    Bibliotecas y Módulos
    Foto de perfil de Leandro Hirt da Academify

    colorsys en Python: RGB, HSV y HLS

    Aprende colorsys en Python para convertir colores entre RGB, HSV, HLS y YIQ, crear paletas y evitar errores de escala

    Ler mais

    Tempo de leitura: 5 minutos
    09/08/2026
    Icono de configuración que representa archivos plist con plistlib en Python
    Bibliotecas y Módulos
    Foto de perfil de Leandro Hirt da Academify

    plistlib: lee y escribe archivos plist

    Aprende plistlib en Python para leer y escribir archivos plist XML y binarios, validar datos y manejar fechas, bytes y

    Ler mais

    Tempo de leitura: 6 minutos
    08/08/2026