从多个序列比对输出相同的列

时间:2013-02-13 02:21:06

标签: python biopython sequence-alignment

您好。我正在编写一个函数来查找相同的对齐列,然后将这些列存储在字典中,使得键应该是列(作为字符串),值是包含列索引的列表。我有一些困难。我当前的代码只能进行一次对齐:

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 :(得分: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个位置。