Lendo bloco por arquivo usando delimitador especificado em python
Eu tenho um arquivo input_file.fa como este (FASTA formato):
> header1 description
data data
data
>header2 description
more data
data
data
Quero ler no arquivo um pedaço de cada vez, para que cada pedaço contenha um cabeçalho e os dados correspondentes, por exemplo Bloco 1:
> header1 description
data data
data
Claro que eu poderia simplesmente ler o arquivo assim e dividir:
with open("1.fa") as f:
for block in f.read().split(">"):
pass
MasEu quero evitar a leitura de todo o arquivo na memória, porque os arquivos geralmente são grandes.
Eu posso ler o arquivo linha por linha, é claro:
with open("input_file.fa") as f:
for line in f:
pass
Mas, idealmente, o que eu quero é algo como isto:
with open("input_file.fa", newline=">") as f:
for block in f:
pass
Mas eu recebo um erro:
ValueError: valor ilegal de nova linha:>
Eu também tentei usar omódulo csv, mas sem sucesso.
Eu encontreiesta postagem de 3 anos atrás, que fornece uma solução baseada em gerador para esse problema, mas não parece tão compacto, essa é realmente a única / melhor solução? Seria interessante se fosse possível criar o gerador com uma única linha em vez de uma função separada, algo como este pseudocódigo:
with open("input_file.fa") as f:
blocks = magic_generator_split_by_>
for block in blocks:
pass
Se isso for impossível, acho que você poderia considerar minha pergunta uma duplicata da outra postagem, mas, se for assim, espero que as pessoas possam me explicar por que a outra solução é a única. Muito Obrigado.