← Python EspañolChapter 12 of 13

Visión General de la Biblioteca Estándar

## Objetivos de Aprendizaje - Explorar la biblioteca estándar de Python - Aprender sobre módulos útiles incorporados - Dominar patrones comunes de la biblioteca ## Collections ### Counter ```python from collections import Counter palabras = ["manzana", "plátano", "manzana", "cereza", "plátano", "manzana"] contador = Counter(palabras) print(contador) # Counter({'manzana': 3, 'plátano': 2, 'cereza': 1}) print(contador.most_common(2)) # [('manzana', 3), ('plátano', 2)] ``` ### defaultdict ```python from collections import defaultdict dd = defaultdict(list) # Fábrica por defecto dd["frutas"].append("manzana") dd["frutas"].append("plátano") print(dd["frutas"]) # ['manzana', 'plátano'] print(dd["falta"]) # [] (lista vacía, no error) ``` ### deque ```python from collections import deque dq = deque([1, 2, 3]) dq.append(4) # Añadir a la derecha dq.appendleft(0) # Añadir a la izquierda print(dq) # deque([0, 1, 2, 3, 4]) dq.pop() # Eliminar de la derecha: 4 dq.popleft() # Eliminar de la izquierda: 0 ``` ### namedtuple ```python from collections import namedtuple Punto = namedtuple("Punto", ["x", "y"]) p = Punto(10, 20) print(p.x, p.y) # 10 20 print(p[0], p[1]) # 10 20 ``` ## Itertools ### count, cycle, repeat ```python import itertools # Iterador infinito - contar desde 1 for i, num in zip(range(5), itertools.count(1)): print(num) # 1, 2, 3, 4, 5 # Ciclo a través de iterable for i, item in zip(range(8), itertools.cycle(["a", "b", "c"])): print(item) # a, b, c, a, b, c, a, b # Repetir elemento for item in itertools.repeat("x", 3): print(item) # x, x, x ``` ### chain ```python import itertools lista1 = [1, 2, 3] lista2 = [4, 5, 6] combinado = list(itertools.chain(lista1, lista2)) print(combinado) # [1, 2, 3, 4, 5, 6] # chain.from_iterable anidado = [[1, 2], [3, 4], [5, 6]] plano = list(itertools.chain.from_iterable(anidado)) print(plano) # [1, 2, 3, 4, 5, 6] ``` ### compress, filterfalse ```python import itertools # Compress - seleccionar elementos por filtro datos = ["a", "b", "c", "d"] selector = [True, False, True, False] filtrado = list(itertools.compress(datos, selector)) print(filtrado) # ['a', 'c'] # filterfalse - opuesto de filter numeros = [1, 2, 3, 4, 5, 6] pares = list(itertools.filterfalse(lambda x: x % 2, numeros)) print(pares) # [2, 4, 6] ``` ### islice, takewhile, dropwhile ```python import itertools # islice - slice de iterador numeros = range(10) rebanado = list(itertools.islice(numeros, 3, 8, 2)) print(rebanado) # [3, 5, 7] # takewhile - tomar mientras condición sea True numeros = [1, 2, 3, 4, 5] tomados = list(itertools.takewhile(lambda x: x < 3, numeros)) print(tomados) # [1, 2] # dropwhile - soltar mientras condición sea True, luego tomar el resto soltados = list(itertools.dropwhile(lambda x: x < 3, numeros)) print(soltados) # [3, 4, 5] ``` ## functools ### lru_cache ```python import functools @functools.lru_cache(maxsize=None) def fibonacci(n): if n < 2: return n return fibonacci(n-1) + fibonacci(n-2) print(fibonacci(100)) # Rápido con cache ``` ### partial ```python import functools def potencia(base, exponente): return base ** exponente al_cuadrado = functools.partial(potencia, exponente=2) al_cubo = functools.partial(potencia, exponente=3) print(al_cuadrado(5)) # 25 print(al_cubo(5)) # 125 ``` ### reduce ```python import functools numeros = [1, 2, 3, 4, 5] total = functools.reduce(lambda x, y: x + y, numeros) print(total) # 15 max_num = functools.reduce(lambda a, b: a if a > b else b, numeros) print(max_num) # 5 ``` ## re - Expresiones Regulares ### Patrones Básicos ```python import re texto = "Mi teléfono es 555-123-4567" # Buscar coincidencia = re.search(r'\d{3}-\d{3}-\d{4}', texto) if coincidencia: print(coincidencia.group()) # 555-123-4567 # Encontrar todos numeros = re.findall(r'\d+', texto) print(numeros) # ['555', '123', '4567'] # Reemplazar nuevo_texto = re.sub(r'\d{3}-\d{3}-\d{4}', 'XXX-XXX-XXXX', texto) print(nuevo_texto) # Mi teléfono es XXX-XXX-XXXX # Dividir partes = re.split(r'[\s,-]+', "a,b c-d") print(partes) # ['a', 'b', 'c', 'd'] ``` ### Banderas de Patrones ```python import re texto = "Hola MUNDO" print(re.findall(r'hola', texto, re.IGNORECASE)) # ['Hola', 'MUNDO'] print(re.findall(r'hola', texto, re.I)) # Same multi = "línea1\nlínea2\nlínea3" print(re.findall(r'^línea', multi, re.MULTILINE)) # ['línea1', 'línea2', 'línea3'] ``` ## urllib ```python from urllib.request import urlopen # Solicitud GET with urlopen("https://ejemplo.com") como respuesta: contenido = respuesta.read().decode("utf-8") print(contenido[:200]) ``` ## sqlite3 ```python import sqlite3 conn = sqlite3.connect("mi.db") cursor = conn.cursor() # Crear tabla cursor.execute(""" CREATE TABLE IF NOT EXISTS usuarios ( id INTEGER PRIMARY KEY, nombre TEXT, email TEXT ) """) # Insertar cursor.execute("INSERT INTO usuarios (nombre, email) VALUES (?, ?)", ("Ana", "ana@ejemplo.com")) # Consultar cursor.execute("SELECT * FROM usuarios") for fila in cursor.fetchall(): print(fila) conn.commit() conn.close() ``` ## csv ```python import csv # Lectura with open("datos.csv", "r") como f: lector = csv.DictReader(f) for fila in lector: print(fila["nombre"], fila["edad"]) # Escritura with open("salida.csv", "w", newline="") como f: escritor = csv.DictWriter(f, fieldnames=["nombre", "edad"]) escritor.writeheader() escritor.writerow({"nombre": "Ana", "edad": 30}) ``` ## logging ```python import logging logging.basicConfig( level=logging.INFO, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s" ) logger = logging.getLogger(__name__) logger.info("Esto es un mensaje de información") logger.warning("Esto es una advertencia") logger.error("Esto es un error") ``` ## json ```python import json datos = { "nombre": "Ana", "edad": 30, "habilidades": ["Python", "JavaScript"] } # Serializar json_str = json.dumps(datos, indent=2, sort_keys=True) # Deserializar parseado = json.loads(json_str) # Operaciones de archivo with open("datos.json", "w") como f: json.dump(datos, f, indent=2) with open("datos.json", "r") como f: cargado = json.load(f) ``` ## Resumen - **collections**: Counter, defaultdict, deque, namedtuple - **itertools**: count, cycle, chain, islice, takewhile, dropwhile - **functools**: lru_cache, partial, reduce - **re**: Expresiones regulares para búsqueda de patrones - **urllib**: Solicitudes HTTP - **sqlite3**: Operaciones de base de datos SQLite - **csv**: Manejo de archivos CSV - **logging**: Registro de aplicaciones - **json**: Serialización/deserialización JSON

Comments

Comments powered by Giscus

To enable comments, add your Giscus embed code here.

Learn more about Giscus →