Чтение в файле блок за блоком, используя указанный разделитель в Python
У меня есть файл input_file.fa, как это (FASTA формат):
> header1 description
data data
data
>header2 description
more data
data
data
Я хочу прочитать в файле один блок за раз, чтобы каждый блок содержал один заголовок и соответствующие данные, например, блок 1:
> header1 description
data data
data
Конечно, я мог бы просто прочитать в файле, как это и разделить:
with open("1.fa") as f:
for block in f.read().split(">"):
pass
НоЯ хочу избежать чтения всего файла в памятьпотому что файлы часто большие.
Я могу читать в файле строка за строкой, конечно:
with open("input_file.fa") as f:
for line in f:
pass
Но в идеале я хочу что-то вроде этого:
with open("input_file.fa", newline=">") as f:
for block in f:
pass
Но я получаю ошибку:
ValueError: недопустимое значение новой строки:>
Я также пытался использоватьмодуль CSV, но безуспешно.
Я нашелэта почта 3 года назад, который предоставляет решение этой проблемы на основе генератора, но это не кажется таким компактным, действительно ли это единственное / лучшее решение? Было бы здорово, если бы можно было создать генератор с одной строкой, а не с отдельной функцией, что-то вроде этого псевдокода:
with open("input_file.fa") as f:
blocks = magic_generator_split_by_>
for block in blocks:
pass
Если это невозможно, то я думаю, вы могли бы считать мой вопрос дубликатом другого поста, но если это так, я надеюсь, что люди смогут объяснить мне, почему другое решение является единственным. Большое спасибо.