Leer y escribir archivos es una tarea diaria: registros, configuraciones, cargas y exportaciones. pathlib.Path proporciona una API de rutas orientada a objetos, mientras que los gestores de contexto garantizan que los descriptores se cierren incluso cuando ocurren errores.
from contextlib import ExitStackwith ExitStack() as stack: a = stack.enter_context(path_a.open()) b = stack.enter_context(path_b.open()) # ambos se cierran al salir
Prefiere pathlib para código nuevo: operadores legibles y ayudantes de lectura/escritura de alto nivel.
¿Cómo añado contenido a un archivo de registro?
with path.open("a", encoding="utf-8") as fh: fh.write(line + "\n")
¿Qué modo para imágenes binarias?
"rb" y "wb" - nunca decodifiques imágenes como texto UTF-8.
¿Cómo listo archivos recursivamente?
for p in Path("src").rglob("*.py"): print(p)
¿Qué es el reemplazo atómico?
Escribe un temporal en el mismo directorio del sistema de archivos, luego Path.replace - los lectores ven el archivo antiguo o el nuevo, nunca uno parcial.
¿Cómo manejo archivos que no existen?
Captura FileNotFoundError o comprueba path.exists() cuando la configuración opcional es aceptable.
¿Puede pathlib leer JSON directamente?
No - lee el texto y luego json.loads. O usa json.load con un manejador de archivo abierto.
¿Qué política de errores de codificación debo usar?
strict para pipelines validados; replace o backslashreplace solo para ingesta de registros con pérdida.
¿Cómo obtengo el tamaño del archivo?
path.stat().st_size sin leer el contenido.
¿El `with` se cierra ante una excepción?
Sí - el protocolo del gestor de contexto ejecuta __exit__ y cierra el archivo incluso cuando un error se propaga.