从多个序列比对中输出相同的列
你好。我正在写一个函数,用来找到相同的对齐列,然后把这些列存储在一个字典里。字典的键应该是列名(以字符串形式),而值则是一个列表,里面包含这些列的索引。我在这方面遇到了一些困难。我的当前代码只能处理一个对齐:
from Bio.Align import MultipleSeqAlignment
from Bio.Alphabet import IUPAC, Gapped, generic_dna
from Bio.Seq import Seq
from Bio.SeqRecord import SeqRecord
align1 = MultipleSeqAlignment([
SeqRecord(Seq("ACTGCTAGCTAG", generic_dna), id="Alpha"),
SeqRecord(Seq("ACT-CTAGCTAG", generic_dna), id="Beta"),
SeqRecord(Seq("ACTGCTAGDTAG", generic_dna), id="Gamma"),
])
print align1.format("phylip")
我不知道接下来该怎么做。
输出应该是一个字典,里面包含相同的对齐列作为键,而相同列的索引作为值。
2 个回答
0
由于我的分数太低,无法给上面用户1的回答点赞,但那确实是访问MSA(多序列对齐)列的正确方法。
首先,使用AlignIO读取你的对齐文件:
align1 = AlignIO.read(open("alignment.aln"), "clustal")
然后,按照用户1的帖子中的描述创建一个字典。
接下来,你可以这样访问MSA的列:
align1[0:1,0:10]
这里,第一个索引(0:1)会给你对齐的第一行,而第二个索引(0:10)会给你对齐的前10个位置。
0
你可以通过 align1[:,index]
来访问某一列。
要创建字典,可以使用这个循环:
dict = {}
for i in range(0,align1.get_alignment_length()):
if align1[:,i] in dict:
dict[align1[:,i]].append(i)
else:
dict[align1[:,i]] = [i]