Ich habe eine input_file.fa Datei wie diese (FASTA-Format):Lesen in der Datei Block für Block unter Verwendung der angegebenen Trennzeichen in Python
> header1 description
data data
data
>header2 description
more data
data
data
Ich möchte zu einem Zeitpunkt in der Datei ein Brocken lesen, so dass jeder Chunk enthält einen Header und die entsprechenden Daten, z 1 Block:
> header1 description
data data
data
Natürlich habe ich in der Datei wie dies gerade lesen konnte und Split:
with open("1.fa") as f:
for block in f.read().split(">"):
pass
Aber Ich möchte das Lesen Sie die gesamte Datei in den Speicher, zu vermeiden, da die Dateien oft groß.
ich in der Datei Zeile für Zeile natürlich lesen kann:
with open("input_file.fa") as f:
for line in f:
pass
Aber im Idealfall, was ich will, ist so etwas wie diese:
with open("input_file.fa", newline=">") as f:
for block in f:
pass
Aber ich erhalte eine Fehlermeldung:
ValueError: illegal newline value: >
Ich habe auch versucht, die csv module, aber mit keinem Erfolg.
Ich habe this post von 3 Jahren gefunden, die eine Generator-basierte Lösung für dieses Problem bietet, aber es scheint nicht so kompakt, ist das wirklich die einzige/beste Lösung? Es wäre nett, wenn es möglich ist, den Generator mit einer einzigen Zeile zu erstellen, anstatt einer separaten Funktion, so etwas wie dieser Pseudo-Code:
with open("input_file.fa") as f:
blocks = magic_generator_split_by_>
for block in blocks:
pass
Wenn dies nicht möglich ist, dann denke ich, man könnte meine Frage ein Duplikat betrachten der andere Beitrag, aber wenn das so ist, hoffe ich, dass die Leute mir erklären können, warum die andere Lösung die einzige ist. Danke vielmals.
Haben Sie versucht, http://biopython.org/wiki/Biopython zu verwenden? –
@AshwiniChaudhary Vielen Dank, gute Idee, dass sollte für diesen Fall helfen, aber idealerweise würde ich auch gerne eine generische Lösung, die über biologische Sequenz Datenformate arbeiten würde. –