我已经坚持了三天的问题......到处搜索,发布在Biostar上,仍在等待EMBL回复电子邮件......如果我有更多的代表,我会获得赏金。
使用EMBOSSwin needle()
(成对全局比对)对齐序列后,我得到pair
格式的对齐文件,文件扩展名为.needle
。我想使用Biopython来读取这些对齐以供以后分析。
我按照Biopython's AlignIO wiki中的说明使用AlignIO.read(open('alignment.needle'),'emboss')
,但我不断获得AssertionError
。
我的代码:
>>> from Bio import AlignIO
>>> alignment = AlignIO.read(open("data/all/out/pair1_alignment.needle"), "emboss")
我的错误:
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "C:\Python27\lib\Bio\AlignIO\__init__.py", line 423, in read
first = next(iterator)
File "C:\Python27\lib\Bio\AlignIO\__init__.py", line 370, in parse
for a in i:
File "C:\Python27\lib\Bio\AlignIO\EmbossIO.py", line 150, in __next__
assert seq.replace("-", "") != ""
AssertionError
示例对齐文件:
下载对齐文件here
版本:
线索:
我怀疑这可能与我在实际进行对齐时遇到的警告信息有关,这是由EMBOSS needle()
函数输出的:
Warning: Sequence character string not found in ajSeqCvtKS
答案 0 :(得分:2)
BioStars上的重复帖子,http://www.biostars.org/p/87226/#87399
这似乎是EMBOSS输出的微妙变化。你有一个非常老的版本,EMBOSS版本2。10。0(2005年2月),你的输出文件有这样的行:
gag 1288 -------------------------------------------------- 1287
使用较新版本的EMBOSS(例如6.3.0),给出如下行:
gag 1287 -------------------------------------------------- 1287
Biopython解析器期望后者用于没有字母的对齐部分(例如,当一个序列比另一个序列长得多时),其中开始和结束坐标一致。请更新您的EMBOSS副本,然后解析器应该很高兴。目前的EMBOSS版本是6.5.0版本。
答案 1 :(得分:1)
问题是您将错误的格式文件传递给Biopython。解释如下。
您链接到的文件格式为srspair
(请参阅pair1_aligned.fasta
标题)。值得注意的是,不是 FASTA format - 这是一种完全不同的格式。
深入研究source of Biopython's EmbossIO
,我们可以看到EmbossIterator
(格式为AlignIO.read
时由'emboss'
调用)仅用于处理格式{ {1}}和pair
(有关各种格式的说明,请参阅Alignment formats)。
如果您以simple
格式导出EMBOSS的输出(然后像之前一样调用pair
),那么这应该可以解决您的问题。