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.

Parsing de datos en unidades de bloques usando listas.

Código:

palabra = 'Homo sapiens'
with open(archivo_entrada, 'r') as entrada, open(archivo_salida, 'w') as salida:

    lista_bloques = []
    bloque_str = ""

    for linea in entrada:
        if not ('//' in linea):
            bloque_str += linea
        elif '//' in linea:
            if palabra in bloque_str:
                lista_bloques.append(bloque_str)
            bloque_str = ""

    salida.write(bloque_str)

Tengo un archivo de entrada que tiene bloques de información separados por una “doble barra”. Quiero extraer solo los bloques que contengan “Homo sapiens” entre varios bloques. Cuando intenté analizar los datos con mi código, obtuve un problema similar a la “Salida”. ¿Hay alguna manera de solucionarlo con mi código?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Hay un problema con el código proporcionado. La variable str_block no se está añadiendo a list_block si contiene la palabra clave word. En cambio, se está escribiendo directamente en el archivo de salida. Esto hace que el archivo de salida contenga todos los bloques del archivo de entrada, en lugar de solo aquellos que contienen la palabra clave word.

    Para solucionar este problema, se pueden realizar los siguientes cambios en el código:

    word = 'Homo sapiens'
    with open(input_file, 'r') as input, open(output_file, 'w') as output:
        list_block = []
        str_block = ""
    
        for line in input:
            if not ("//" in line):
                str_block += line
            elif "//" in line:
                if word in str_block:
                    list_block.append(str_block)
                str_block = ""
    
        # Escribe solo los bloques que contienen la palabra clave en el archivo de salida.
        for block in list_block:
            output.write(block)
            output.write("//\n")
    

    En el código actualizado, la variable str_block se añade a list_block si contiene la palabra clave word. Luego, solo se escriben en el archivo de salida los bloques de list_block que contienen la palabra clave. También se agrega el separador // después de cada bloque en el archivo de salida para mantener el mismo formato que el archivo de entrada.

    Con estos cambios, el código ahora debería extraer correctamente solo los bloques que contienen Homo sapiens del archivo de entrada, como se muestra en la salida esperada.

Comments are closed.