Я довольно новичок в мире программирования python, и я пытаюсь написать сценарий, который, учитывая файл FASTA, будет сравнивать последовательности друг с другом и оценивать их (если положение нуклеотида в последовательности A совпадает с нуклеотид в том же положении последовательности B, тогда оценка повысилась бы, например, на 2). До сих пор я получил это:Python: Как сравнить несколько последовательностей из файла fasta друг с другом?
from Bio import SeqIO
def sequence_compare(file):
seq_records = SeqIO.parse(file, "fasta")
for record in seq_records:
len1 = len(str(record.seq))
sequence1 = str(record.seq)
print(sequence1)
for record in seq_records:
len2= len(str(record.seq))
sequence2 = str(record.seq)
print(sequence2)
a = 0
for pos in range (0,min(len1,len2)) :
if sequence1[pos] == sequence2[pos]:
a+= 2
if sequence1[pos] != sequence2[pos]:
a+= -1
if sequence1[pos] == sequence2[pos] == '-':
a+= -2
print(a)
Выход он дает для файла Fasta с 3 последовательностями в нем:
ACTGACTGACTGACTGACTG
ACTGACTGACTG-ACTGACT
16
AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-5
Мне кажется, что первый цикл только петли один раз, а второй для цикл не начинается с первой последовательности.
Желаемый результат будет заключаться в том, что каждая последовательность сравнивается друг с другом и забивается. Таким образом, последовательность 1 по сравнению с последовательностью 1 и ее оценкой, последовательность 1 по сравнению с последовательностью 2 и ее оценкой, последовательность 1 по сравнению с последовательностью 3 и ее оценкой и т. Д.
Если кто-то может мне помочь, это было бы весьма полезно !
Почему вы делаете свой собственный (довольно упрощенно) алгоритм подсчета очков? 'Bio.Align' есть много на выбор. – MattDMo
Я не знал, что существует в Bio.Align. Спасибо за предложение, я посмотрю на это! –