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.

¿Cómo modifico los valores de un iterador en Python?

Como proyecto paralelo, estoy creando un analizador básico de HTML. El HTML se pasa como una cadena y creo un iterador para ello. Necesito eliminar grupos de espacios en blanco en ciertos puntos, por ejemplo, si el carácter es un espacio en blanco, me gustaría consumirlo, eliminarlo y avanzar uno por uno hasta llegar a un carácter que no sea un espacio en blanco, donde la función se detendría.

Configuración del iterador:

from more_itertools import peekable
chars = peekable("</        html    >")

Por ejemplo:

"</        html    >

…se convierte en:

"</html    >"
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para eliminar grupos de espacios en blanco de la cadena HTML utilizando objetos iterables, podemos utilizar los módulos itertools y more_itertools en Python. Aquí tenemos el código de ejemplo para eliminar grupos de espacios en blanco:

    from more_itertools import peekable
    from itertools import takewhile
    
    def remove_whitespace(chars):
        # Avanzar para ver si el siguiente carácter es un espacio en blanco
        while chars and chars.peek().isspace():
            # Consumir caracteres de espacio en blanco hasta encontrar un carácter que no sea espacio en blanco
            whitespace_group = list(takewhile(str.isspace, chars))
            if len(whitespace_group) > 1:
                # Eliminar el grupo de espacios en blanco e insertar un solo carácter de espacio
                chars.consume(len(whitespace_group))
                chars.insert(' ')
            else:
                # No eliminar caracteres individuales de espacio en blanco
                break
    

    Puedes utilizar esta función para eliminar grupos de espacios en blanco de tu cadena HTML de la siguiente manera:

    # Ejemplo de uso:
    html_string = "</        html    >"
    chars = peekable(html_string)
    
    # Eliminar grupos de espacios en blanco
    while chars:
        remove_whitespace(chars)
    
    # Imprimir la cadena HTML modificada
    print("".join(chars))
    # Salida: "</html    >"
    

    En la función remove_whitespace, utilizamos la función takewhile para consumir todos los caracteres de espacio en blanco consecutivos en un grupo. Si la longitud del grupo de espacios en blanco es mayor que uno, lo eliminamos utilizando el método consume del objeto peekable e insertamos un solo carácter de espacio en su lugar. Si el siguiente carácter no es un espacio en blanco, dejamos de eliminar grupos de espacios en blanco. Por último, llamamos a la función remove_whitespace en un bucle hasta que no queden más espacios en blanco en la cadena HTML.

Comments are closed.