如何在 Biopython 中创建多序列比对对象列表?

How to create a list of Multiple Sequence Alignment objects in Biopython?

可能是个简单的问题,但我无法创建一个简单的 MultipleSeqAlignment 对象列表。

from Bio import AlignIO
import Bio.Align

#Read multi-aligned fasta file
alignment = AlignIO.read(sys.argv[1], "fasta")

#some testing values
first_POI = 10 #base position
major = "a" #major allele
minor = "g" #minor allele

#create lists of sequence ids that are major or minor allele
align_major = Bio.Align.MultipleSeqAlignment([])
align_minor = Bio.Align.MultipleSeqAlignment([])

for record in alignment:
    if (record.seq[first_POI] == major):
        #compile the sequences that have major allele
        align_major = align_major + record
    elif (record.seq[first_POI] == minor):
        #compile sequences with minor allele
        align_minor = align_minor + record    

我收到这个错误:

  File "FindHaplotypes.py", line 53, in <module>
    align_major=align_major+record
  File "C:\Python34\lib\site-packages\Bio\Align\__init__.py", line 385, in __add__
    raise NotImplementedError

所以我有点困惑,我已经可以想象来自 Bio.AlignMultipleSeqAlignment 可能与为 Bio.AlignIO 存储的对象类型不同。我假设因为他们都处理 MSA,所以他们是一样的。我知道我的 AlignIO 对象可以像字符串一样将它们加在一起,但问题是我不知道如何初始化一个空的 AlignIO 对象以按上述方式将它们加在一起。以前我不得不通过将第一条记录设置为新变量然后进入 for 循环来添加到它,以一种丑陋的方式来做到这一点。

错误很明显:NotImplementedErrorMultipleSeqAlignment__add__的Biopython实现要求这两个对象是MultipleSeqAlignment的实例。涉及其他对象的添加未实现。

您应该使用您的 msa 的方法 append()

for record in alignment:
    if (record.seq[first_POI]==major):
        #compile the sequences that have major allele
        align_major.append(record)
    elif (record.seq[first_POI]==minor):
        #compile sequences with minor allele
        align_minor.append(record)

这需要 record 成为 SeqRecord,具有与 align_mayoralign_minor 相同的 Alphabet 和相同的长度。