如何在 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.Align
的 MultipleSeqAlignment
可能与为 Bio.AlignIO
存储的对象类型不同。我假设因为他们都处理 MSA,所以他们是一样的。我知道我的 AlignIO
对象可以像字符串一样将它们加在一起,但问题是我不知道如何初始化一个空的 AlignIO
对象以按上述方式将它们加在一起。以前我不得不通过将第一条记录设置为新变量然后进入 for 循环来添加到它,以一种丑陋的方式来做到这一点。
错误很明显:NotImplementedError
。 MultipleSeqAlignment
中__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_mayor
和 align_minor
相同的 Alphabet
和相同的长度。
可能是个简单的问题,但我无法创建一个简单的 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.Align
的 MultipleSeqAlignment
可能与为 Bio.AlignIO
存储的对象类型不同。我假设因为他们都处理 MSA,所以他们是一样的。我知道我的 AlignIO
对象可以像字符串一样将它们加在一起,但问题是我不知道如何初始化一个空的 AlignIO
对象以按上述方式将它们加在一起。以前我不得不通过将第一条记录设置为新变量然后进入 for 循环来添加到它,以一种丑陋的方式来做到这一点。
错误很明显:NotImplementedError
。 MultipleSeqAlignment
中__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_mayor
和 align_minor
相同的 Alphabet
和相同的长度。