Я написал код для перебора файла FASTA, который работает нормально, но я получаю неправильную длину. Я не могу понять, как изменить оставшуюся часть кода, чтобы он давал наибольшее значение ORF из каждой последовательности, чтобы все ORF могли быть перечислены и затем отсортированы для получения наибольшей длины.
Код должен возвращать длину самого длинного ORF только из второй рамки считывания и только в направлении 3 '-> 5'.
После использования translate()
для получения аминокислотных последовательностей из последовательностей ДНК Я использовал len(pro)*3+3
, чтобы получить длины ORF. Я также пытался translate()
с другими аргументами. Все еще получил неправильные результаты. Я не знаю, что не так с кодом. Ссылка на файл с последовательностями может быть найдена ниже следующего кода и вывода.
Код
from Bio import SeqIO
records = list(SeqIO.parse(r"file.fasta", "fasta"))
lengths = []
for record in records:
table = 1
min_pro_len = 100
frame = 1
longest = 0
for strand, nuc in [(+1, record.seq)]:
length = 3 * ((len(record)-frame) // 3) #Multiple of three
for pro in nuc[frame:frame+length].translate(table).split("*"):
if len(pro) >= min_pro_len and frame == 1:
lengths.append(len(pro)*3+3)
Вывод, который я получаю
При вводе >>> print(sorted(lengths))
в оболочке Python выводится следующий вывод:
[303, 303, 306, 318, 339, 372, 384, 426, 429, 456, 471, 480, 489, 492, 546, 549, 570, 573, 576, 585, 660, 666, 684, 693, 810, 855, 945, 957, 1026, 1041, 1299, 1320, 1533, 1578, 1740, 1911]
FASTA-файл с последовательностями: sequences.fasta