Привет, ребята. Я работаю с огромным сжатым gz-файлом fasta, и у меня есть хороший анализатор фаста, но я хотел бы сделать его более общим, так как я могу проверить сжатие, чтобы разобрать gz или несжатый файл.
Я пытаюсь этот код:
def is_header(line):
return line[0] == '>'
def parse_multi_fasta_file_compressed_or_not(filename):
if filename.endswith('.gz'):
with gzip.open(filename, 'rt') as f:
fasta_iter = (it[1] for it in itertools.groupby(f, is_header))
else:
with open(filename, 'r') as f:
fasta_iter = (it[1] for it in itertools.groupby(f, is_header))
for name in fasta_iter:
name = name.__next__()[1:].strip()
sequences = ''.join(seq.strip() for seq in fasta_iter.__next__())
yield name, sequences
ref: https://drj11.wordpress.com/2010/02/22/python-getting-fasta-with-itertools-groupby/
https://www.biostars.org/p/710/
Я пытался изменить отступы. Python не жалуется ни на какую ошибку. Тем не менее, он не печатает и не показывает никаких результатов. Я использую игрушечный файл с 5 последовательностями.
Просто напомню, что файл фаста выглядит примерно так:
>header_1
AATATATTCAATATGGAGAGAATAAAAGAACTAAGAGATCTAATGTCACAGTCTCGCACTCGCGAGATAC
TCACCAAAACCACTGTGGACCACATGGCCATAATCAAAAAGTACACATCAGGAAGGCAAGAGAAGAACCC
TGCACTCAGGATGAAGTGGATGATG
>header_2
AACCATTTGAATGGATGTCAATCCGACTTTACTTTTCTTGAAAGTTCCAGCGCAAAATGCCATAAGCACC
ACATTTCCCTATACTGGAGACCCTCC
Я бы хотел использовать try:... except:...
вместо if
.
Если у кого-нибудь из вас есть какой-нибудь совет, который поможет мне в этом разобраться, я был бы очень признателен (это вовсе не упражнение на курсе!).
Спасибо за ваше время.
Paulo