Blockweises Lesen der Datei mit dem angegebenen Trennzeichen in python

Ich habe eine input_file.fa-Datei wie diese FASTA Format)

> header1 description
data data
data
>header2 description
more data
data
data

Ich möchte die Datei stückweise einlesen, sodass jedes Stück einen Header und die entsprechenden Daten enthält, z. Block 1

> header1 description
data data
data

Natürlich könnte ich die Datei einfach so einlesen und aufteilen:

with open("1.fa") as f:
    for block in f.read().split(">"):
        pass

AberIch möchte vermeiden, dass die gesamte Datei in den Speicher eingelesen wird, da die Dateien häufig groß sind.

Ich kann die Datei natürlich zeilenweise einlesen:

with open("input_file.fa") as f:
    for line in f:
        pass

Aber im Idealfall ist das, was ich will, ungefähr so:

with open("input_file.fa", newline=">") as f:
    for block in f:
        pass

Aber ich erhalte einen Fehler:

ValueError: ungültiger Zeilenumbruchswert:>

Ich habe auch versucht mit demcsv module, aber ohne Erfolg.

Ich habe @ gefunddieser Beitra von vor 3 Jahren, die eine generatorbasierte Lösung für dieses Problem bietet, aber es scheint nicht so kompakt zu sein, ist dies wirklich die einzige / beste Lösung? Es wäre ordentlich, wenn es möglich wäre, den Generator nicht mit einer separaten Funktion, sondern mit einer einzelnen Zeile zu erstellen, etwa mit folgendem Pseudocode:

with open("input_file.fa") as f:
    blocks = magic_generator_split_by_>
    for block in blocks:
        pass

Wenn dies nicht möglich ist, könnten Sie meine Frage als Duplikat des anderen Beitrags betrachten, aber wenn dies der Fall ist, können mir die Leute hoffentlich erklären, warum die andere Lösung die einzige ist. Danke vielmals

Antworten auf die Frage(6)

Ihre Antwort auf die Frage