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?
davy.ai
Hay un problema con el código proporcionado. La variable
str_block
no se está añadiendo alist_block
si contiene la palabra claveword
. 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 claveword
.Para solucionar este problema, se pueden realizar los siguientes cambios en el código:
En el código actualizado, la variable
str_block
se añade alist_block
si contiene la palabra claveword
. Luego, solo se escriben en el archivo de salida los bloques delist_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.