Lectura en archivo bloque por bloque usando el delimitador especificado en python
Tengo un archivo input_file.fa como este (FASTA formato):
> header1 description
data data
data
>header2 description
more data
data
data
Quiero leer en el archivo un fragmento a la vez, para que cada fragmento contenga un encabezado y los datos correspondientes, p. bloque 1:
> header1 description
data data
data
Por supuesto, podría leer en el archivo así y dividir:
with open("1.fa") as f:
for block in f.read().split(">"):
pass
PeroQuiero evitar leer todo el archivo en la memoria, porque los archivos suelen ser grandes.
Puedo leer en el archivo línea por línea, por supuesto:
with open("input_file.fa") as f:
for line in f:
pass
Pero idealmente, lo que quiero es algo como esto:
with open("input_file.fa", newline=">") as f:
for block in f:
pass
Pero me sale un error:
ValueError: valor de nueva línea ilegal:>
También he intentado usar elmódulo csv, pero sin éxito.
Encontréesta publicación de hace 3 años, que proporciona una solución basada en generador para este problema, pero no parece tan compacto, ¿es realmente la única / mejor solución? Sería genial si es posible crear el generador con una sola línea en lugar de una función separada, algo como este pseudocódigo:
with open("input_file.fa") as f:
blocks = magic_generator_split_by_>
for block in blocks:
pass
Si esto es imposible, supongo que podría considerar mi pregunta como un duplicado de la otra publicación, pero si es así, espero que la gente pueda explicarme por qué la otra solución es la única. Muchas gracias.