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.

Respuestas a la pregunta(3)

Su respuesta a la pregunta