2 usuarios conectados

Extraer info de registro. Ejercicio en Python

Comparte esto

 
Escribe una función en Python llamada extraer_info_de_registro que tome una lista de cadenas de texto (simulando líneas de un registro) como entrada. Cada línea sigue el patrón: [NIVEL] - MENSAJE - VALOR: dato. La función debe extraer el valor asociado a la clave "VALOR" de cada línea y devolver una lista de estos datos.


Más ejercicios




Mostrar/Ocultar ejercicio resuelto


  Solución al Ejercicio: Extraer info de registro

📋 Copiar código


import re

def extraer_info_de_registro(registros):
  """
  Extrae el valor asociado a 'VALOR' de líneas de registro con un formato específico.

  Args:
    registros: Una lista de cadenas de texto (líneas de registro).

  Returns:
    Una lista de los datos extraídos de las líneas de registro.
  """
  datos_extraidos = []
  patron = re.compile(r'\[\w+\] - .*? - VALOR: (.*)')
  for linea in registros:
    coincidencia = patron.search(linea)
    if coincidencia:
      datos_extraidos.append(coincidencia.group(1).strip())
  return datos_extraidos

# Ejemplos de uso
registros_ejemplo = [
    "[INFO] - Inicio del proceso - VALOR: 123",
    "[WARNING] - Error en la conexión - VALOR: fallo",
    "[DEBUG] - Variable x asignada - VALOR: abc",
    "[ERROR] - Archivo no encontrado - VALOR: None",
    "Línea sin el formato esperado",
    "[INFO] - Fin del proceso - VALOR: 456  "
]

resultado = extraer_info_de_registro(registros_ejemplo)
print(f"Datos extraídos del registro: {resultado}")


 

Explicación del Código:

  1. import re:

    • Importa el módulo re para trabajar con expresiones regulares.
  2. def extraer_info_de_registro(registros)::

    • Define una función llamada extraer_info_de_registro que toma una lista de cadenas de texto (registros) como entrada.
  3. datos_extraidos = []:

    • Inicializa una lista vacía llamada datos_extraidos para almacenar los valores extraídos.
  4. patron = re.compile(r'\[\w+\] - .*? - VALOR: (.*)'):

    • Compila una expresión regular para buscar el patrón en cada línea de registro:
      • \[\w+\]: Coincide con un texto entre corchetes (el nivel), donde \w+ significa uno o más caracteres de palabra.
      • -: Coincide con un espacio, un guion y otro espacio.
      • .*?: Coincide con cualquier carácter (.) cero o más veces (*?) de forma no codiciosa (para que coincida con la parte del mensaje más corta posible antes de "VALOR").
      • - VALOR:: Coincide con el texto literal " - VALOR: ".
      • (.*): Coincide con cualquier carácter (.) cero o más veces (*) y lo captura en un grupo (()). Este es el valor que queremos extraer.
  5. for linea in registros::

    • Itera a través de cada linea en la lista de registros.
  6. coincidencia = patron.search(linea):

    • Intenta encontrar la primera ocurrencia del patron en la linea. Si se encuentra, coincidencia será un objeto de coincidencia; de lo contrario, será None.
  7. if coincidencia::

    • Verifica si se encontró una coincidencia.
  8. datos_extraidos.append(coincidencia.group(1).strip()):

    • Si hubo una coincidencia:
      • coincidencia.group(1): Extrae el texto capturado por el primer grupo en el patrón (que es el valor después de "VALOR: ").
      • .strip(): Elimina cualquier espacio en blanco al principio o al final del valor extraído.
      • datos_extraidos.append(...): Añade el valor extraído a la lista datos_extraidos.
  9. return datos_extraidos:

    • Después de procesar todas las líneas en registros, devuelve la lista datos_extraidos que contiene todos los valores extraídos.

Ejemplos de Uso:

El ejemplo muestra cómo la función procesa una lista de líneas de registro y extrae los valores asociados a "VALOR" de aquellas líneas que siguen el formato esperado. Las líneas que no coinciden con el patrón son ignoradas.