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:
-
import re:
- Importa el módulo
re para
trabajar con expresiones regulares.
-
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.
-
datos_extraidos = []:
- Inicializa una lista vacía llamada
datos_extraidos para almacenar los valores extraídos.
-
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.
-
for linea in registros::
- Itera a través de cada
linea
en la lista de registros.
-
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.
-
if coincidencia::
- Verifica si se encontró una coincidencia.
-
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.
-
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.