es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Python: Cómo dividir el texto en una matriz multidimensional.

Estoy extrayendo datos de una página web y finalmente tengo 5 cadenas que se ven así:

charts[1][‘min’] = [[‘Mi’,5.6],[‘Do’,2.9],[‘Fr’,1.7],[‘Sa’,3.7],[‘So’,2.9],[‘Mo’,4.1],[‘Di’,4]];
charts[1][‘mittel’] = [[‘Mi’,6.2],[‘Do’,5.4],[‘Fr’,3.9],[‘Sa’,4.5],[‘So’,4.7],[‘Mo’,5.4],[‘Di’,4.6]];
charts[1][‘max’] = [[‘Mi’,7.2],[‘Do’,8.8],[‘Fr’,5.9],[‘Sa’,5.5],[‘So’,6.8],[‘Mo’,6.6],[‘Di’,5.8]];
charts[2][‘line’] = [[‘Mi’,59],[‘Do’,69],[‘Fr’,72],[‘Sa’,65],[‘So’,66],[‘Mo’,65],[‘Di’,76]];
charts[3][‘line’] = [[‘Mi’,5],[‘Do’,4],[‘Fr’,0],[‘Sa’,5],[‘So’,0],[‘Mo’,5],[‘Di’,0]];

Obviamente necesitaría un array que contenga solo la parte derecha. Los datos siempre son un día (en alemán) y un número. Al ser nuevo en Python, busco una solución fácil. ¿Alguna idea?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Una solución es utilizar expresiones regulares para extraer los datos de las cadenas. Aquí hay un ejemplo:

    import re
    
    # Strings de entrada
    strings = [
        "charts[1]['min'] = [['Mi',5.6],['Do',2.9],['Fr',1.7],['Sa',3.7],['So',2.9],['Mo',4.1],['Di',4]];",
        "charts[1]['mittel'] = [['Mi',6.2],['Do',5.4],['Fr',3.9],['Sa',4.5],['So',4.7],['Mo',5.4],['Di',4.6]];",
        "charts[1]['max'] = [['Mi',7.2],['Do',8.8],['Fr',5.9],['Sa',5.5],['So',6.8],['Mo',6.6],['Di',5.8]];",
        "charts[2]['line'] = [['Mi',59],['Do',69],['Fr',72],['Sa',65],['So',66],['Mo',65],['Di',76]];",
        "charts[3]['line'] = [['Mi',5],['Do',4],['Fr',0],['Sa',5],['So',0],['Mo',5],['Di',0]];"
    ]
    
    # Expresión regular para encontrar los datos
    pattern = r"\[.+?'\,(\d+\.\d+|\d+)\]\,?"
    
    # Extraemos los datos de cada cadena y los almacenamos en una lista de tuplas
    data = []
    for s in strings:
        matches = re.findall(pattern, s)
        data.append(tuple(matches))
    
    # Imprimimos los datos
    print(data)
    
    # salida: [('5.6', '2.9', '1.7', '3.7', '2.9', '4.1', '4'), ('6.2', '5.4', '3.9', '4.5', '4.7', '5.4', '4.6'), ('7.2', '8.8', '5.9', '5.5', '6.8', '6.6', '5.8'), ('59', '69', '72', '65', '66', '65', '76'), ('5', '4', '0', '5', '0', '5', '0')]
    
    

    En este ejemplo, usamos una expresión regular para coincidir con los pares de día y número (por ejemplo, ['Mi',5.6]). El patrón de expresión regular \[[^,]+?'\,(\d+\.\d+|\d+)\]\,? coincide con un corchete seguido de cualquier conjunto de caracteres que no sean comas ([^,]) y una comilla simple, seguida de una coma, seguida de un número con o sin decimales ((\d+\.\d+|\d+)), seguido de un corchete y una coma opcional.

    Luego, aplicamos esta expresión regular a cada cadena de entrada usando la función re.findall, que devuelve una lista de todas las coincidencias. Convertimos esta lista en una tupla y la agregamos a una lista de tuplas llamada data. Finalmente, imprimimos la lista data, que contiene solo la parte derecha de las cadenas originales (es decir, los pares de día y número).

Comments are closed.