Módulos esenciales en Python para el desarrollo cotidiano

  1. Módulo time

Para gestionar el tiempo y fechas en Python, se emplea el módulo time. Permite trabajar con marcas de tiempo, retardos y formatos de fecha/hora.


# Obtención de la marca de tiempo actual
marca_actual = time.time()
print("Marca de tiempo actual:", marca_actual)

# Pausa de ejecución por un número específico de segundos
time.sleep(2)  # Retraso de 2 segundos

# Convertir marca de tiempo a estructura de tiempo local
estructura_local = time.localtime(marca_actual)
print("Estructura de tiempo local:", estructura_local)

# Formatear estructura de tiempo como cadena
cadena_formateada = time.strftime("%Y-%m-%d %H:%M:%S", estructura_local)
print("Tiempo formateado:", cadena_formateada)

# Ejemplo adicional: Convertir cadena a marca de tiempo
cadena_fecha = "2023/10/15"
estructura = time.strptime(cadena_fecha, "%Y/%m/%d")
marca = time.mktime(estructura)
print("Marca de tiempo desde cadena:", marca)

  1. Módulo calendar

Este módulo ofrece funciones para análisis y visualización de calendarios, como determinar años bisiestos o generar calendarios mensuales.


# Verificar si un año es bisiesto
es_bisiesto = calendar.isleap(2024)
print("2024 es bisiesto:", es_bisiesto)

# Generar el calendario de un mes específico
calendario_mes = calendar.month(2023, 11)
print("Calendario de noviembre 2023:\n", calendario_mes)

# Obtener el día de la semana para una fecha
dia_semana = calendar.weekday(2023, 11, 15)
print("Día de la semana (0=lunes):", dia_semana)

  1. Módulo datetime

Proporciona clases para manipular fechas y horas de manera más intuitiva que el módulo time, facilitando operaciones como cálculos de intervalos.


import datetime

# Obtener la fecha y hora actual
ahora = datetime.datetime.now()
print("Fecha y hora actual:", ahora)

# Calcular una fecha en el futuro o pasado
futuro = ahora + datetime.timedelta(days=10)
print("Fecha en 10 días:", futuro)

# Reemplazar componentes de una fecha
nueva_fecha = ahora.replace(hour=15, minute=30)
print("Fecha modificada:", nueva_fecha)

# Convertir marca de tiempo a fecha
fecha_desde_marca = datetime.date.fromtimestamp(time.time())
print("Fecha desde marca de tiempo:", fecha_desde_marca)

  1. Módulo sys

Permite interactuar con el intérprete de Python y el sistema operativo, proporcionando acceso a argumentos de línea de comandos, rutas y configuraciones del entorno.


import sys

# Obtener argumentos de línea de comandos
argumentos = sys.argv
print("Argumentos del script:", argumentos)

# Salir del programa con un código de estado
sys.exit(0)  # Salida normal

# Acceder a la versión de Python
version_python = sys.version
print("Versión de Python:", version_python)

# Rutas de búsqueda de módulos
rutas = sys.path
print("Rutas del sistema:", rutas)

  1. Módulo os

Facilita operaciones con el sistema de archivos y el entorno del sistema operativo, como crear directorios, manipular rutas y ejecutar comandos del sistema.


import os

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

# Listar archivos en un directorio
archivos = os.listdir(".")
print("Archivos en el directorio actual:", archivos)

# Obtener la ruta absoluta de un archivo
ruta_absoluta = os.path.abspath("archivo.txt")
print("Ruta absoluta:", ruta_absoluta)

# Comprobar si una ruta es un archivo o directorio
es_archivo = os.path.isfile("archivo.txt")
es_directorio = os.path.isdir("nuevo_directorio")
print("¿Es archivo?", es_archivo)
print("¿Es directorio?", es_directorio)

# Unir componentes de ruta
ruta_completa = os.path.join("carpeta", "subcarpeta", "archivo.log")
print("Ruta completa:", ruta_completa)

  1. Módulo random

Genera números pseudoaleatorios y selecciona elementos aleatorios de secuencias, útil para simulaciones, pruebas y juegos.


import random

# Generar un número flotante aleatorio entre 0 y 1
numero_aleatorio = random.random()
print("Número aleatorio (0-1):", numero_aleatorio)

# Generar un entero aleatorio dentro de un rango
entero_aleatorio = random.randint(1, 100)
print("Entero aleatorio (1-100):", entero_aleatorio)

# Seleccionar un elemento aleatorio de una lista
opciones = ["rojo", "verde", "azul"]
seleccion = random.choice(opciones)
print("Color seleccionado:", seleccion)

# Barajar una lista aleatoriamente
lista = [1, 2, 3, 4, 5]
random.shuffle(lista)
print("Lista barajada:", lista)

# Ejemplo: Generar código de verificación aleatorio
codigo = ""
for _ in range(6):
    if random.random() > 0.5:
        codigo += chr(random.randint(65, 90))
    else:
        codigo += str(random.randint(0, 9))
print("Código de verificación:", codigo)

  1. Módulo json

Permite la serialización y deserialización de datos en formato JSON, facilitando el intercambio de datos entre sistemas.


import json

# Diccionario de ejemplo para serializar
datos = {"nombre": "Ana", "edad": 30, "ciudad": "Madrid"}

# Serializar a cadena JSON
cadena_json = json.dumps(datos, indent=4)
print("Cadena JSON:\n", cadena_json)

# Deserializar desde cadena JSON
objeto = json.loads(cadena_json)
print("Objeto recuperado:", objeto)

# Escribir JSON a un archivo
with open("datos.json", "w") as archivo:
    json.dump(datos, archivo, indent=4)

# Leer JSON desde un archivo
with open("datos.json", "r") as archivo:
    datos_leidos = json.load(archivo)
print("Datos desde archivo:", datos_leidos)

  1. Módulo pickle

Realiza la serialización de objetos Python complejos a una representación de bytes, permitiendo su almacenamiento o transmisión.


import pickle

# Objeto Python para serializar
objeto_original = {"clave": [1, 2, 3], "valor": (4, 5)}

# Serializar a bytes
bytes_serializados = pickle.dumps(objeto_original)
print("Bytes serializados:", bytes_serializados[:100])  # Mostrar parcial

# Deserializar desde bytes
objeto_restaurado = pickle.loads(bytes_serializados)
print("Objeto restaurado:", objeto_restaurado)

# Guardar en archivo binario
with open("datos.pkl", "wb") as archivo:
    pickle.dump(objeto_original, archivo)

# Cargar desde archivo binario
with open("datos.pkl", "rb") as archivo:
    objeto_cargado = pickle.load(archivo)
print("Objeto cargado:", objeto_cargado)

  1. Módulo shutil

Proporciona operaciones de alto nivel para copiar, mover y eliminar archivos y directorios, incluyendo manejo de permisos.


import shutil

# Copiar un archivo
shutil.copy("origen.txt", "destino.txt")

# Copiar un directorio completo (recursivamente)
shutil.copytree("directorio_origen", "directorio_destino")

# Mover un archivo o directorio
shutil.move("archivo_antiguo.txt", "nueva_ubicacion/archivo.txt")

# Eliminar un directorio y todo su contenido
shutil.rmtree("directorio_a_eliminar")

# Crear un archivo comprimido (zip)
shutil.make_archive("backup", "zip", "directorio_datos")

  1. Módulo shelve

Ofrece una interfaz tipo diccionario para almacenar objetos Python en archivos, facilitando la persistencia de datos estructurados.


import shelve

# Abrir una base de datos shelve
with shelve.open("mi_base_datos") as db:
    # Almacenar datos
    db["usuario1"] = {"nombre": "Carlos", "activo": True}
    db["usuario2"] = {"nombre": "María", "activo": False}

    # Recuperar datos
    usuario = db["usuario1"]
    print("Datos del usuario1:", usuario)

    # Actualizar datos
    db["usuario1"]["activo"] = False
    print("Usuario1 actualizado:", db["usuario1"])

  1. Módulo logging

Implementa un sistema flexible de registro de eventos, permitiendo controlar niveles de severidad y destinos de los mensajes.


import logging

# Configurar el registro básico
logging.basicConfig(
    level=logging.DEBUG,
    format="%(asctime)s - %(levelname)s - %(message)s"
)

# Registrar mensajes en diferentes niveles
logging.debug("Mensaje de depuración")
logging.info("Mensaje informativo")
logging.warning("Advertencia")
logging.error("Error")
logging.critical("Error crítico")

  1. Módulo hashlib

Proporciona funciones de hash criptográfico para generar resúmenes de datos, útil para verificar integridad y seguridad.


import hashlib

# Datos a hashear
datos = "ejemplo de texto".encode("utf-8")

# Calcular hash MD5
hash_md5 = hashlib.md5(datos).hexdigest()
print("Hash MD5:", hash_md5)

# Calcular hash SHA-256 con sal
hash_objeto = hashlib.sha256()
hash_objeto.update("sal".encode("utf-8"))
hash_objeto.update(datos)
hash_sha256 = hash_objeto.hexdigest()
print("Hash SHA-256 con sal:", hash_sha256)

  1. Módulo hmac

Genera códigos de autenticación de mensajes hash (HMAC) para verificar la integridad y autenticidad de datos.


import hmac

# Clave y mensaje
clave = "mi_clave_secreta".encode("utf-8")
mensaje = "datos_a_autenticar".encode("utf-8")

# Crear HMAC usando SHA-256
hmac_objeto = hmac.new(clave, mensaje, hashlib.sha256)
codigo_hmac = hmac_objeto.hexdigest()
print("Código HMAC:", codigo_hmac)

# Verificar HMAC
verificacion = hmac.new(clave, mensaje, hashlib.sha256).hexdigest()
es_valido = hmac.compare_digest(verificacion, codigo_hmac)
print("HMAC válido:", es_valido)

  1. Módulo configparser

Permite leer y escribir archivos de configuración en formato INI, facilitando la gestión de parámetros de aplicación.


import configparser

# Crear un parser de configuración
config = configparser.ConfigParser()

# Agregar secciones y opciones
config["servidor"] = {
    "host": "localhost",
    "puerto": "8080"
}
config["base_datos"] = {
    "nombre": "mi_db",
    "usuario": "admin"
}

# Escribir a un archivo
with open("config.ini", "w") as archivo:
    config.write(archivo)

# Leer desde un archivo
config.read("config.ini")
host = config["servidor"]["host"]
print("Host del servidor:", host)

  1. Módulo subprocess

Permite ejecutar procesos externos y comandos del sistema, capturando su salida y código de retorno.


import subprocess

# Ejecutar un comando y capturar salida
resultado = subprocess.run(["ls", "-l"], capture_output=True, text=True)
print("Salida del comando:\n", resultado.stdout)

# Ejecutar comando en shell con tubería
proceso = subprocess.Popen(
    ["grep", "python"],
    stdin=subprocess.PIPE,
    stdout=subprocess.PIPE,
    text=True
)
salida, _ = proceso.communicate(input="ejemplo en python\notra línea")
print("Salida filtrada:", salida)

  1. Módulos xlrd y xlwt

Para leer y escribir archivos de Excel (formato .xls), respectivamente, permitiendo el procesamiento de hojas de cálculo.


import xlrd

# Leer un archivo Excel
libro = xlrd.open_workbook("datos.xlsx")
hoja = libro.sheet_by_index(0)

# Obtener valores de celdas
valor = hoja.cell_value(0, 0)
print("Valor en celda (0,0):", valor)

import xlwt

# Crear un archivo Excel
libro_escritura = xlwt.Workbook()
hoja_escritura = libro_escritura.add_sheet("NuevaHoja")

# Escribir datos
hoja_escritura.write(0, 0, "Encabezado1")
hoja_escritura.write(0, 1, "Encabezado2")
hoja_escritura.write(1, 0, "Dato1")
hoja_escritura.write(1, 1, "Dato2")

# Guardar el archivo
libro_escritura.save("nuevo_archivo.xls")

  1. Módulo xml

Facilita el análisis y manipulación de documentos XML, proporcionando un árbol de elementos para navegar y modificar la estructura.


import xml.etree.ElementTree as ET

# Analizar un archivo XML
arbol = ET.parse("ejemplo.xml")
raiz = arbol.getroot()

# Iterar sobre elementos
for elemento in raiz:
    print("Etiqueta:", elemento.tag, "Atributos:", elemento.attrib)

# Buscar elementos específicos
elementos = raiz.findall(".//nombre_etiqueta")
for elem in elementos:
    print("Texto:", elem.text)

# Modificar un elemento
for hijo in raiz:
    if hijo.tag == "elemento_a_modificar":
        hijo.text = "nuevo_valor"

# Guardar cambios
arbol.write("ejemplo_modificado.xml")

  1. Módulo re

Implementa operaciones con expresiones regulares para buscar, coincidir y transformar patrones en cadenas de texto.


import re

# Patrón de ejemplo
cadena = "Contacto: usuario@ejemplo.com, teléfono 123-456-7890"

# Buscar una dirección de correo electrónico
patron_email = r"[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+"
coincidencia = re.search(patron_email, cadena)
if coincidencia:
    print("Email encontrado:", coincidencia.group())

# Reemplazar todos los números por asteriscos
cadena_limpia = re.sub(r"\d", "*", cadena)
print("Cadena con números ocultos:", cadena_limpia)

# Dividir la cadena por comas
partes = re.split(r",\s*", cadena)
print("Partes de la cadena:", partes)

# Validar un número de teléfono
telefono = "123-456-7890"
if re.match(r"^\d{3}-\d{3}-\d{4}$", telefono):
    print("Formato de teléfono válido")

Etiquetas: Python time Calendar datetime sys

Publicado el 6-17 22:32