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.

Método pythonico para extraer los dígitos numéricos de una cadena de texto.

Estoy desarrollando un programa para leer un archivo CSV y crear un diccionario de información a partir de él. Cada línea del CSV es esencialmente una nueva entrada de diccionario en donde los objetos delimitados son los valores.

Como parte de una sub-tarea, necesito extraer un número desconocido de dígitos numéricos dentro de una cadena. Tengo una versión funcional, pero no parece muy “pythonica”.

Un ejemplo de cadena se ve así:

variable = Applicaiton.Module_Name.VAR_NAME_ST12.WORD_type[0]

variable es el nombre de la cadena en el código Python, y representa el nombre de la variable dentro de un MODBUS. Quiero extraer solo los dígitos anteriores a .WORD_type[0], que se relacionan con el número de bytes en los que la cadena se empaqueta.

Aquí está mi código de trabajo, tenga en cuenta que está anidado dentro de un bucle for que itera a través de las líneas del CSV. var_length y var_type son algunas de las keys, es decir, {"var_length": var_length}.

if re.search(".+_ST[0-9]{1,2}\.WORD_type.+", variable):
    var_type = "string"
    temp = re.split("\.", variable)
    temp = re.split("_", temp[2])
    temp = temp[-1]
    var_length = int(str.lstrip(temp, "ST")) / 2
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para hacer el código más pythonico, podemos simplificarlo utilizando regex y list comprehension. Aquí está el código actualizado:

    import re
    
    # ejemplo de cadena
    variable = "Applicaiton.Module_Name.VAR_NAME_ST12.WORD_type[0]"
    
    # extraer dígitos utilizando regex
    digits_match = re.search(r'ST(\d+)', variable)
    
    # si se encuentra una coincidencia, convertirla en entero y dividir por 2
    if digits_match:
        var_length = int(digits_match.group(1)) // 2
        var_type = "string"
    

    Explicación:

    • re.search(r'ST(\d+)', variable) – Esto busca el patrón “ST” seguido de uno o más dígitos en la cadena variable.
    • digits_match.group(1) – Esto extrae los dígitos que coinciden con el patrón regex.
    • int(digits_match.group(1)) // 2 – Esto convierte los dígitos coincidentes en un entero y luego lo divide entre 2 para obtener la longitud de la variable.
    • var_type = "string" – Esto establece la variable var_type en “string” según el código original.

    Utilizando este código actualizado, hemos simplificado el código utilizando regex para la coincidencia de patrones y list comprehension para extraer los dígitos, y reducido el número de variables temporales requeridas.

Comments are closed.