【发布时间】:2017-04-24 00:04:31
【问题描述】:
我对 python 的编程世界很陌生,我正在尝试编写一个脚本,给定一个 FASTA 文件,它将相互比较序列并对它们进行评分(如果序列 A 中的核苷酸位置匹配如果核苷酸在序列 B 的相同位置,则分数会上升 2,例如)。到目前为止,我得到了这个:
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)
它为包含 3 个序列的 Fasta 文件提供的输出:
ACTGACTGACTGACTGACTG
ACTGACTGACTG-ACTGACT
16
AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-5
在我看来,第一个 for 循环只循环一次,第二个 for 循环不是从第一个序列开始的。
期望的输出是每个序列相互比较并评分。所以序列 1 与序列 1 及其分数进行比较,序列 1 与序列 2 及其分数进行比较,序列 1 与序列 3 及其分数进行比较,等等……
如果有人可以帮助我,将不胜感激!
【问题讨论】:
-
您为什么要制定自己的(相当简单的)评分算法?
Bio.Align有很多选择。 -
我不知道 Bio.Align 中存在。感谢您的建议,我会研究一下!
标签: python for-loop biopython fasta