sábado, 7 de marzo de 2026

10 Ejercicios de Python Resueltos: Ficheros, RegEx, Pandas y NumPy

¡Llegamos al final de nuestra megaguía en larebelion.com! Ya hemos superado las bases, las estructuras, la POO y la algoritmia. ¿Qué nos queda? Interactuar con el mundo real.

En este último bloque de 10 ejercicios (del 41 al 50) nos enfrentamos a problemas de exámenes de universidades españolas que exigen leer ficheros TXT, CSV y JSON, validar datos con Expresiones Regulares (RegEx) y utilizar las librerías estrella: Pandas y NumPy. ¡Vamos a por el 10!




41. Ficheros TXT: Contar Líneas y Palabras (UAH)

Enunciado: Escribe una función que abra un archivo de texto en modo lectura y devuelva una tupla con el número total de líneas y el número total de palabras.

def analizar_archivo(ruta):
    try:
        with open(ruta, 'r', encoding='utf-8') as f:
            lineas = f.readlines()
            num_lineas = len(lineas)
            num_palabras = sum(len(linea.split()) for linea in lineas)
            return (num_lineas, num_palabras)
    except FileNotFoundError:
        return "Archivo no encontrado"

42. Ficheros: Escribir sin Sobrescribir (UAL)

Enunciado: Crea una función que reciba una ruta y una cadena de texto, y añada ese texto al final del archivo existente sin borrar su contenido anterior.

def anadir_log(ruta, mensaje):
    # Usamos el modo 'a' (append) en lugar de 'w' (write)
    with open(ruta, 'a', encoding='utf-8') as f:
        f.write(mensaje + "\n")

43. Manejo de JSON: Guardar Diccionarios (URV)

Enunciado: Dado un diccionario de Python con datos de estudiantes, expórtalo a un archivo con formato JSON, asegurando que la indentación sea de 4 espacios.

import json

def guardar_json(datos, ruta_salida):
    with open(ruta_salida, 'w', encoding='utf-8') as f:
        json.dump(datos, f, indent=4, ensure_ascii=False)

44. CSV Nativo: Leer Columnas (UJI)

Enunciado: Usando solo la librería estándar csv, lee un archivo y devuelve una lista con todos los valores de la segunda columna.

import csv

def extraer_columna(ruta_csv):
    columna = []
    with open(ruta_csv, 'r', encoding='utf-8') as f:
        lector = csv.reader(f)
        for fila in lector:
            if len(fila) > 1:
                columna.append(fila[1])
    return columna

45. RegEx: Validador de DNI Español (UCA)

Enunciado: Escribe una función que utilice expresiones regulares para comprobar si un string tiene el formato válido de un DNI español (8 números seguidos de una letra mayúscula).

import re

def es_dni_valido(dni):
    # Patrón: Exactamente 8 dígitos (\d{8}) y 1 letra mayúscula ([A-Z])
    patron = r"^\d{8}[A-Z]$"
    return bool(re.match(patron, dni))

46. RegEx: Extractor de Correos Electrónicos (UNIOVI)

Enunciado: Dado un texto largo, extrae todas las direcciones de correo electrónico que aparezcan en él usando re.findall.

import re

def extraer_emails(texto):
    patron = r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"
    return re.findall(patron, texto)

47. NumPy: Arrays 1D a 2D (UPNA)

Enunciado: Utiliza NumPy para crear un array de 12 elementos (del 1 al 12) y luego cambia su forma (reshape) para convertirlo en una matriz de 3x4.

import numpy as np

def crear_matriz_numpy():
    # np.arange(1, 13) crea array del 1 al 12
    array_1d = np.arange(1, 13)
    matriz_2d = array_1d.reshape((3, 4))
    return matriz_2d

48. Pandas: Leer y Calcular Media (UPO)

Enunciado: Escribe un código usando Pandas que lea un archivo "alumnos.csv" y calcule la media aritmética de la columna llamada 'Nota_Final'.

import pandas as pd

def calcular_media_csv(ruta):
    df = pd.read_csv(ruta)
    if 'Nota_Final' in df.columns:
        return df['Nota_Final'].mean()
    return None

49. Pandas: Filtrado de DataFrames (UCLM)

Enunciado: Dado un DataFrame de Pandas con información de empleados, filtra y devuelve solo aquellos que pertenezcan al departamento de 'IT' y cobren más de 2000€.

import pandas as pd

def filtrar_empleados(df):
    # Uso de condiciones booleanas múltiples con &
    filtro = df[(df['Departamento'] == 'IT') & (df['Salario'] > 2000)]
    return filtro

50. El Ejercicio Final: Manejo de Excepciones Múltiples (UVA)

Enunciado: Crea una función que intente convertir un input de texto a número entero y luego dividir 100 entre ese número. Atrapa específicamente los errores ValueError y ZeroDivisionError.

def division_segura(entrada):
    try:
        numero = int(entrada)
        resultado = 100 / numero
        return resultado
    except ValueError:
        return "Error: Debes introducir un número válido."
    except ZeroDivisionError:
        return "Error: No se puede dividir entre cero."

No hay comentarios:

Publicar un comentario