Ir al contenido principal

Biblioteca estándar: módulos importantes

Introducción

La biblioteca estándar de Python es uno de sus mayores tesoros. Se trata de un conjunto de módulos y paquetes que vienen incluidos con cualquier instalación del lenguaje, ofreciendo funcionalidades ya listas para usar sin necesidad de instalar software adicional. Esta biblioteca es tan completa que el lema "Python viene con baterías incluidas" se ha hecho famoso entre la comunidad de programadores. En este artículo, exploraremos los módulos más importantes y útiles de la biblioteca estándar, que te ayudarán a resolver problemas comunes de programación sin reinventar la rueda.

¿Qué es la biblioteca estándar?

La biblioteca estándar de Python es una colección de módulos que están disponibles en todas las instalaciones de Python. Estos módulos proporcionan soluciones para tareas habituales como:

  • Manipulación de archivos y directorios
  • Operaciones matemáticas
  • Manipulación de datos
  • Fechas y tiempo
  • Manejo de datos en diferentes formatos (CSV, JSON, XML...)
  • Compresión de archivos
  • Comunicaciones en red
  • Y muchas más funcionalidades

Módulos esenciales de la biblioteca estándar

1. os - Interacción con el sistema operativo

El módulo os proporciona funciones para interactuar con el sistema operativo de manera independiente de la plataforma. Es ideal para trabajar con archivos y directorios.

import os

# Obtener el directorio actual
directorio_actual = os.getcwd()
print(f"Estás trabajando en: {directorio_actual}")

# Listar archivos y directorios
contenido = os.listdir(".")
print(f"Contenido del directorio: {contenido}")

# Crear un nuevo directorio
os.mkdir("nuevo_directorio")

# Comprobar si un archivo existe
existe = os.path.exists("archivo.txt")
print(f"¿El archivo existe? {existe}")

# Obtener información del sistema
nombre_sistema = os.name
print(f"Sistema operativo: {nombre_sistema}")

2. sys - Acceso a variables del sistema

El módulo sys proporciona acceso a algunas variables utilizadas o mantenidas por el intérprete de Python y a funciones que interactúan fuertemente con el intérprete.

import sys

# Versión de Python
print(f"Versión de Python: {sys.version}")

# Argumentos de línea de comandos
print(f"Argumentos: {sys.argv}")

# Rutas de importación
print(f"Rutas de búsqueda de módulos: {sys.path}")

# Tamaño de objetos
lista_grande = list(range(1000))
print(f"Tamaño de la lista: {sys.getsizeof(lista_grande)} bytes")

# Salir del programa
# sys.exit(0)  # Descomentar para probar

3. random - Generación de números aleatorios

El módulo random implementa generadores de números pseudoaleatorios para varias distribuciones.

import random

# Número aleatorio entre 0 y 1
aleatorio = random.random()
print(f"Número aleatorio (0-1): {aleatorio}")

# Entero aleatorio en un rango
entero_aleatorio = random.randint(1, 10)
print(f"Entero aleatorio (1-10): {entero_aleatorio}")

# Elección aleatoria de una lista
colores = ["rojo", "verde", "azul", "amarillo"]
color = random.choice(colores)
print(f"Color elegido: {color}")

# Barajar una lista
numeros = list(range(1, 11))
random.shuffle(numeros)
print(f"Lista barajada: {numeros}")

# Muestra aleatoria
muestra = random.sample(colores, 2)
print(f"Muestra de colores: {muestra}")

4. math - Funciones matemáticas

El módulo math proporciona acceso a funciones matemáticas definidas por el estándar C.

import math

# Constantes
print(f"Pi: {math.pi}")
print(f"e: {math.e}")

# Funciones trigonométricas (en radianes)
angulo = math.pi / 4  # 45 grados
print(f"Seno de 45°: {math.sin(angulo)}")
print(f"Coseno de 45°: {math.cos(angulo)}")
print(f"Tangente de 45°: {math.tan(angulo)}")

# Redondeo
print(f"Techo de 4.3: {math.ceil(4.3)}")  # 5
print(f"Suelo de 4.7: {math.floor(4.7)}")  # 4

# Potencias y logaritmos
print(f"2 elevado a 8: {math.pow(2, 8)}")
print(f"Logaritmo natural de 10: {math.log(10)}")
print(f"Logaritmo base 10 de 100: {math.log10(100)}")

# Raíz cuadrada
print(f"Raíz cuadrada de 16: {math.sqrt(16)}")

5. datetime - Trabajando con fechas y tiempo

El módulo datetime proporciona clases para manipular fechas y horas.

from datetime import datetime, date, time, timedelta

# Fecha y hora actual
ahora = datetime.now()
print(f"Fecha y hora actual: {ahora}")

# Crear fecha específica
fecha_nacimiento = date(1990, 5, 15)
print(f"Fecha de nacimiento: {fecha_nacimiento}")

# Crear hora específica
hora_almuerzo = time(14, 30)
print(f"Hora de almuerzo: {hora_almuerzo}")

# Combinar fecha y hora
fecha_hora = datetime.combine(fecha_nacimiento, hora_almuerzo)
print(f"Fecha y hora combinada: {fecha_hora}")

# Operaciones con fechas
hoy = date.today()
diferencia = hoy - fecha_nacimiento
print(f"Días vividos: {diferencia.days}")

# Agregar tiempo
mañana = hoy + timedelta(days=1)
proxima_semana = hoy + timedelta(weeks=1)
print(f"Mañana: {mañana}")
print(f"Próxima semana: {proxima_semana}")

# Formateo de fechas
formato_es = ahora.strftime("%d/%m/%Y %H:%M:%S")
print(f"Formato español: {formato_es}")

6. collections - Tipos de datos contenedores

El módulo collections proporciona tipos de datos alternativos a los contenedores integrados como dict, list, set y tuple.

from collections import Counter, defaultdict, namedtuple, deque

# Counter - contar ocurrencias
palabras = ["perro", "gato", "perro", "canario", "gato", "perro"]
conteo = Counter(palabras)
print(f"Conteo de palabras: {conteo}")
print(f"Animal más común: {conteo.most_common(1)}")

# defaultdict - diccionario con valor por defecto
frutas_por_color = defaultdict(list)
frutas_por_color["rojo"].append("manzana")
frutas_por_color["amarillo"].append("plátano")
frutas_por_color["rojo"].append("fresa")
print(f"Frutas por color: {dict(frutas_por_color)}")

# namedtuple - tuplas con campos nombrados
Persona = namedtuple("Persona", ["nombre", "edad", "ciudad"])
persona1 = Persona("Ana", 30, "Madrid")
print(f"Persona: {persona1}")
print(f"Nombre: {persona1.nombre}, Edad: {persona1.edad}")

# deque - cola de doble extremo (eficiente)
cola = deque(["tarea1", "tarea2", "tarea3"])
cola.append("tarea4")  # Agregar al final
cola.appendleft("tarea0")  # Agregar al inicio
print(f"Cola: {cola}")
tarea = cola.pop()  # Quitar del final
print(f"Tarea completada: {tarea}")
print(f"Cola actualizada: {cola}")

7. json - Trabajando con JSON

El módulo json proporciona funciones para codificar y decodificar datos en formato JSON.

import json

# Diccionario en Python
datos = {
    "nombre": "Miguel",
    "edad": 28,
    "ciudad": "Barcelona",
    "hobbies": ["ajedrez", "fotografía", "senderismo"],
    "activo": True
}

# Convertir a JSON (serializar)
json_datos = json.dumps(datos, indent=4, ensure_ascii=False)
print(f"JSON:\n{json_datos}")

# Guardar en archivo
with open("datos.json", "w", encoding="utf-8") as archivo:
    json.dump(datos, archivo, indent=4, ensure_ascii=False)

# Leer desde cadena JSON (deserializar)
nuevo_datos = json.loads(json_datos)
print(f"Nombre: {nuevo_datos['nombre']}")
print(f"Primer hobby: {nuevo_datos['hobbies'][0]}")

# Leer desde archivo
with open("datos.json", "r", encoding="utf-8") as archivo:
    datos_leidos = json.load(archivo)
    print(f"Datos leídos: {datos_leidos}")

8. re - Expresiones regulares

El módulo re proporciona operaciones de coincidencia de expresiones regulares similares a las encontradas en Perl.

import re

texto = "Mi número de teléfono es 654-987-123 y mi código postal es 28001"

# Buscar patrones
telefonos = re.findall(r'\d{3}-\d{3}-\d{3}', texto)
print(f"Teléfonos encontrados: {telefonos}")

# Buscar y reemplazar
texto_censurado = re.sub(r'\d{3}-\d{3}-\d{3}', 'XXX-XXX-XXX', texto)
print(f"Texto censurado: {texto_censurado}")

# Dividir texto
palabras = re.split(r'\s+', texto)
print(f"Palabras: {palabras}")

# Comprobar si un patrón coincide
email = "usuario@dominio.com"
es_email = bool(re.match(r'^[\w.-]+@[\w.-]+\.\w+$', email))
print(f"¿Es un email válido? {es_email}")

9. urllib - Trabajando con URLs

El módulo urllib proporciona una interfaz para recuperar datos de URLs.

from urllib import request, parse

# URL para obtener datos
url = "https://httpbin.org/get"

# Realizar solicitud GET
with request.urlopen(url) as respuesta:
    contenido = respuesta.read().decode('utf-8')
    print(f"Respuesta:\n{contenido[:200]}...")

# URL con parámetros
parametros = {
    "nombre": "Laura",
    "ciudad": "Valencia"
}
url_params = url + "?" + parse.urlencode(parametros)
print(f"URL con parámetros: {url_params}")

# Descargar un archivo
try:
    request.urlretrieve("https://www.python.org/static/img/python-logo.png", "python-logo.png")
    print("Logo descargado correctamente")
except Exception as e:
    print(f"Error al descargar: {e}")

10. csv - Trabajando con archivos CSV

El módulo csv implementa clases para leer y escribir datos en formato CSV (valores separados por comas).

import csv

# Datos de ejemplo
datos = [
    ["Nombre", "Edad", "Ciudad"],
    ["Carlos", "25", "Sevilla"],
    ["Lucía", "32", "Valencia"],
    ["Jorge", "41", "Bilbao"]
]

# Escribir en CSV
with open("personas.csv", "w", newline="", encoding="utf-8") as archivo:
    escritor = csv.writer(archivo)
    escritor.writerows(datos)
    print("Archivo CSV creado correctamente")

# Leer de CSV
with open("personas.csv", "r", encoding="utf-8") as archivo:
    lector = csv.reader(archivo)
    print("Contenido del CSV:")
    for fila in lector:
        print(f"  {', '.join(fila)}")

# Usar diccionarios
datos_dict = [
    {"Nombre": "Carlos", "Edad": "25", "Ciudad": "Sevilla"},
    {"Nombre": "Lucía", "Edad": "32", "Ciudad": "Valencia"},
    {"Nombre": "Jorge", "Edad": "41", "Ciudad": "Bilbao"}
]

# Escribir diccionarios en CSV
with open("personas_dict.csv", "w", newline="", encoding="utf-8") as archivo:
    campos = ["Nombre", "Edad", "Ciudad"]
    escritor = csv.DictWriter(archivo, fieldnames=campos)
    escritor.writeheader()
    escritor.writerows(datos_dict)
    print("Archivo CSV (con diccionarios) creado correctamente")

# Leer CSV a diccionarios
with open("personas_dict.csv", "r", encoding="utf-8") as archivo:
    lector = csv.DictReader(archivo)
    print("Contenido como diccionarios:")
    for fila in lector:
        print(f"  {fila['Nombre']} tiene {fila['Edad']} años y vive en {fila['Ciudad']}")

Otros módulos útiles

Estos son otros módulos importantes que merece la pena conocer:

  • pathlib: Manipulación de rutas de archivos orientada a objetos (alternativa moderna a os.path)
  • shutil: Operaciones de alto nivel sobre archivos (copiar, mover, eliminar)
  • argparse: Procesamiento de argumentos de línea de comandos
  • logging: Facilita la generación de mensajes de registro
  • unittest: Marco de pruebas unitarias
  • sqlite3: Interfaz a bases de datos SQLite
  • hashlib: Implementa varios algoritmos de hash seguros
  • threading y multiprocessing: Para programación concurrente
  • zipfile y tarfile: Para trabajar con archivos comprimidos
  • pickle: Serialización de objetos Python

¿Cómo explorar la biblioteca estándar?

Python ofrece varias formas de explorar y aprender sobre los módulos de la biblioteca estándar:

  1. Documentación oficial: La documentación de Python proporciona información detallada.
  2. Función help(): Utiliza help(modulo) o help(modulo.funcion) en el intérprete.
  3. Función dir(): Muestra los atributos y métodos de un módulo con dir(modulo).
# Ejemplo de exploración con dir()
import os
atributos = dir(os)
print(f"Algunos atributos de 'os': {atributos[:5]}")

# Ejemplo de exploración con help()
# help(os.path.join)  # Descomentar para ver la ayuda

Resumen

La biblioteca estándar de Python es un recurso invaluable que proporciona soluciones listas para usar para una gran variedad de problemas comunes. Conocer estos módulos te permitirá escribir código más eficiente y elegante, evitando reinventar la rueda. En este artículo, hemos explorado algunos de los módulos más importantes, pero hay muchos más disponibles para tareas específicas. Te animamos a explorar la documentación oficial y experimentar con estos módulos para familiarizarte con ellos. En el próximo artículo, veremos cómo instalar y gestionar bibliotecas externas utilizando pip y entornos virtuales.