1 usuario conectado

Extraer clave-valor. Ejercicio en Python

Comparte esto

 
Escribe una función en Python llamada extraer_clave_valor que tome una cadena de texto (que puede contener múltiples líneas) como entrada y devuelva un diccionario donde las claves son las claves encontradas y los valores son los valores correspondientes. La función debe ignorar las líneas que no sigan el formato "clave: valor".

.


Más ejercicios




Mostrar/Ocultar ejercicio resuelto


  Solución al Ejercicio: Extraer clave-valor

📋 Copiar código


import re

def extraer_clave_valor(texto):
  """
  Extrae información de clave-valor de un texto donde cada par está en
  la forma "clave: valor".

  Args:
    texto: La cadena de texto de entrada (puede contener múltiples líneas).

  Returns:
    Un diccionario con las claves y valores extraídos.
  """
  datos = {}
  for linea in texto.strip().split('\n'):
    coincidencia = re.match(r'^\s*([^:]+):\s*(.+?)\s*$', linea)
    if coincidencia:
      clave = coincidencia.group(1).strip()
      valor = coincidencia.group(2).strip()
      datos[clave] = valor
  return datos

# Ejemplos de uso
texto1 = """
nombre: Juan Pérez
edad: 30
ciudad: Madrid
profesión: ingeniero
"""
resultado1 = extraer_clave_valor(texto1)
print(f"Datos extraídos:\n{resultado1}")

texto2 = """
idioma: español
version: 1.0
autor: IA
"""
resultado2 = extraer_clave_valor(texto2)
print(f"\nDatos extraídos:\n{resultado2}")

texto3 = """
clave_simple: valor_simple
otra_clave: otro valor
# línea comentada
sin_formato
"""
resultado3 = extraer_clave_valor(texto3)
print(f"\nDatos extraídos:\n{resultado3}")

texto4 = "unica_clave: unico_valor"
resultado4 = extraer_clave_valor(texto4)
print(f"\nDatos extraídos:\n{resultado4}")

texto5 = ""
resultado5 = extraer_clave_valor(texto5)
print(f"\nDatos extraídos:\n{resultado5}")


Explicación del Código:

  1. import re:

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

    • Define una función llamada extraer_clave_valor que toma una cadena de texto (texto) como entrada.
  3. datos = {}:

    • Inicializa un diccionario vacío datos para almacenar las claves y valores extraídos.
  4. for linea in texto.strip().split('\n')::

    • Procesa cada línea del texto:
      • texto.strip(): Elimina cualquier espacio en blanco al principio o al final del texto.
      • .split('\n'): Divide el texto en una lista de líneas, utilizando el carácter de nueva línea como delimitador.
  5. coincidencia = re.match(r'^\s*([^:]+):\s*(.+?)\s*$', linea):

    • Intenta hacer coincidir la línea con el patrón de clave-valor usando re.match() (que busca una coincidencia al principio de la cadena):
      • ^: Coincide con el inicio de la línea.
      • \s*: Coincide con cero o más espacios en blanco.
      • ([^:]+): Coincide con uno o más caracteres que no sean dos puntos (:) y los captura en el primer grupo (la clave).
      • :: Coincide con el carácter de dos puntos literal.
      • \s*: Coincide con cero o más espacios en blanco después de los dos puntos.
      • (.+?): Coincide con uno o más caracteres (cualquiera) de forma no codiciosa (?) y los captura en el segundo grupo (el valor). La no codicia asegura que coincida hasta el siguiente espacio en blanco antes del final de la línea.
      • \s*: Coincide con cero o más espacios en blanco al final del valor.
      • $: Coincide con el final de la línea.
  6. if coincidencia::

    • Si la línea coincide con el patrón de clave-valor.
  7. clave = coincidencia.group(1).strip():

    • Extrae el texto capturado en el primer grupo (la clave) y elimina cualquier espacio en blanco al principio o al final.
  8. valor = coincidencia.group(2).strip():

    • Extrae el texto capturado en el segundo grupo (el valor) y elimina cualquier espacio en blanco al principio o al final.
  9. datos[clave] = valor:

    • Agrega la clave y el valor al diccionario datos.
  10. return datos:

    • Devuelve el diccionario con los pares clave-valor extraídos.

Ejemplos de Uso:

Los ejemplos muestran cómo la función procesa cadenas de texto con diferentes formatos (múltiples líneas, una sola línea, líneas sin formato) y extrae los pares clave-valor que cumplen con el patrón esperado. Las líneas que no siguen el formato son ignoradas.