您好。我正在编写一个函数来查找相同的对齐列,然后将这些列存储在字典中,使得键应该是列(作为字符串),值是包含列索引的列表。我有一些困难。我当前的代码只能进行一次对齐:
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")
我不知道如何从这里开始。
输出应该是一个字典,其中包含相同的对齐列作为键,并将相同列的索引作为值。
答案 0 :(得分: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]
答案 1 :(得分:0)
由于我的分数太低,无法通过上述用户1提交响应,但这是访问MSA列的正确方法。
使用AlignIO读取校准:
align1 = AlignIO.read(open(“alignment.aln”),“clustal”)
然后按照user1的帖子中所述创建字典。
然后,您可以访问MSA的列:
align1 [0:1,0:10]
第一个索引(0:1)将为您提供对齐的第一行,第二个索引(0:10)将为您提供对齐的前10个位置。