Faragiri

Aprender La biblioteca estándar Python

Un lector de argumentos, una zona horaria que conoce las medias horas, agrupar sin ciclo, y el módulo que evita inventar un token a mano.

4Secciones
4Minutos
4Profundidad

Seis imports, ninguna dependencia

Para qué sirve cada módulo, agrupado por la tarea que uno tenía

Cada rama de aquí es algo por lo que alguien instala un paquete, y cada hoja ya está en la máquina.

  • Recibir argumentosUn script que corre otra persona
    • argparse: banderas, tipos y una línea de uso gratis
  • Ciclos que ya iba a escribirAgrupar, emparejar, partir en lotes
    • itertools.groupby: ordene por la llave primero, o agrupa dos veces
    • itertools.pairwise: pares consecutivos, desde Python 3.10
    • itertools.batched: lotes, y el último lote corto queda resuelto
  • Que quepa en pantallaAnchos, y espacio en disco
    • textwrap: corta en un límite de palabra
    • shutil: bytes libres, antes de escribir y no después de fallar
ya instalado
  • Tiempo que no es aritméticaDesfases, incluidas las medias horas
    • zoneinfo: Asia/Kolkata, no un número de horas
  • Cualquier cosa que vea un extrañoTokens, enlaces, URLs de recuperación
    • secrets: no es aleatorio, es predecible a partir de su salida

Las ramas son tareas y no categorías, porque el índice del módulo está organizado al revés y por eso nadie las encuentra. La rama que falta en esta figura es cualquier cosa que necesite una red, que es donde una dependencia de verdad empieza.

La mayoría de las dependencias chicas en un proyecto de Python reemplazan algo que ya viene instalado. Seis módulos cubren la mayor parte, y cada uno es un solo import, sin versión que fijar y sin nada que se rompa el día que alguien deje de mantenerlo.

argparse convierte un script en un comando. ap.add_argument("--limite", type=int, default=50) y un valor inválido termina la corrida con invalid int value: 'muchos' después de imprimir la línea de uso, antes de que el resto del código corra. action="store_true" da una bandera --simulacro, y parsear ["inscritos", "--simulacro"] responde Namespace(carpeta='inscritos', simulacro=True, limite=50). Note el guion bajo: un guion en la bandera se vuelve guion bajo en el atributo.

zoneinfo maneja la parte del tiempo que no es aritmética. Camila coordina una llamada de trabajo remoto entre Bogotá y un cliente en Bangalore: ZoneInfo("Asia/Kolkata") en una mañana de septiembre da 2026-09-22T19:00:00+05:30, y convertir a UTC da 2026-09-22T13:30:00+00:00. La media hora de diferencia es la razón para usar una base de zonas horarias real y nunca un número entero de horas, y está en la biblioteca estándar desde Python 3.9.

Tres que reemplazan un ciclo que ya iba a escribir

itertools.groupby colapsa un ciclo de agrupación, con una condición que atrapa a todo el mundo una vez: agrupa solo corridas ya adyacentes, así que las filas tienen que venir ordenadas por esa misma llave primero. Sobre filas de inscritos ya ordenadas por turno, entrega mañana con ['Camila', 'Esteban'] y luego tarde. Sin ordenar antes, produce la misma llave dos veces.

itertools.pairwise da pares consecutivos: [(1, 4), (4, 9), (9, 16)] a partir de cuatro lecturas, que es cada ciclo de diferencia-entre-valores-consecutivos jamás escrito, en una sola llamada, desde Python 3.10. itertools.batched parte una secuencia en lotes: [('A', 'B', 'C'), ('D', 'E', 'F'), ('G',)], y el último lote corto es el caso que un armador hecho a mano suele arruinar.

Uno que es una decisión de seguridad y no una comodidad

secrets es el que conviene conocer por nombre. secrets.token_urlsafe(16) devuelve una cadena de 22 caracteres segura para poner en una URL, tomada de la fuente criptográfica del sistema operativo. El módulo random no es eso: es rápido, reproducible y predecible a partir de su salida, lo cual es exactamente correcto para barajar una lista y exactamente incorrecto para un enlace de recuperación de contraseña. Usar random donde corresponde secrets es una vulnerabilidad real que ninguna prueba detecta, y es la razón por la que los dos módulos existen por separado.

textwrap y shutil llenan los espacios alrededor. textwrap.shorten(texto, width=24, placeholder=" ...") da una carpeta muy larga ..., cortando en un límite de palabra y no a la mitad, y shutil.disk_usage("/").free responde en bytes, que es la comprobación que un script que escribe archivos debería hacer antes de empezar y no después de fallar.

Qué revisar en 2026

El índice de módulos de la documentación estándar es la herramienta, gratis, y el hábito que vale la pena formar es abrirlo antes de agregar una dependencia y no después. Reemplaza buscar primero un paquete, que confiablemente encuentra uno, porque alguien ya publicó un paquete para cada cosa de esta lista.

Python 3.14 es lo que estas versiones asumen, gratis y de código abierto. Tres de los seis módulos de arriba ganaron la función específica nombrada aquí después de 2020, así que una base de código fijada a un intérprete viejo tiene menos de esto de lo que esta página sugiere, y revisar la nota de versión en la documentación es un hábito de diez segundos que evita un error de importación confuso.

Por dónde se pierde la gente aquí

El tropiezo es no saber qué buscar, y ninguna cantidad de lectura arregla eso directamente. Nadie busca pairwise sin conocer la palabra, y el ciclo que calcula diferencias entre lecturas consecutivas se escribe a mano cientos de veces porque es lo bastante fácil de escribir.

Lo que sí funciona es leer el índice de un módulo cada vez que se escribe un ciclo que se siente genérico. Un ciclo que agrupa, parte en lotes, empareja, cuenta o aplana es una de ocho funciones entre itertools y collections, y quince minutos con esos dos índices es la lectura de mayor rendimiento en este lenguaje.

Los modismos que estas funciones reemplazan están cubiertos en Python desde cero, y lo que hacer cuando la respuesta de verdad es una dependencia externa está en paquetes y entornos. El mismo módulo argparse vuelve a aparecer en automatización con scripts, esta vez agendado.

Al lado de esto

Arriba de esto