0

我被一个问题困扰了三天......到处搜索,发布在Biostar上,仍在等待 EMBL 回复电子邮件......如果我有更多的代表,将会获得赏金。

在使用 EMBOSSwin needle()(成对全局对齐)对齐序列后,我得到pair格式的对齐文件,带有.needle文件扩展名。我想使用Biopython读取这些对齐方式以供以后分析。

AlignIO.read(open('alignment.needle'),'emboss')按照Biopython 的 AlignIO wiki中的说明使用,但我不断得到一个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

对齐文件示例:

在此处下载对齐文件

对齐文件图片

版本:

  • Windows 7的
  • Python 版本 2.7.3
  • Biopython 1.63 版
  • EMBOSS 版本 2.10.0-0.8

线索:

我怀疑这可能与我在实际进行对齐时不断收到的警告消息有关,该消息由 EMBOSSneedle()函数输出:

Warning: Sequence character string not found in ajSeqCvtKS
4

2 回答 2

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 版。

于 2013-11-26T12:09:20.073 回答
1

问题是您将错误的格式文件传递给 Biopython。下面是一个解释。

格式化

您链接到的文件的格式是srspair(请参阅 的标题pair1_aligned.fasta)。值得注意的是,这不是FASTA格式——这是一种完全不同的格式。

深入研究 Biopython's 的源代码EmbossIO,我们可以看到(在格式为 时EmbossIterator被调用)仅用于处理格式和(有关各种格式的说明,请参见对齐格式)。AlignIO.read'emboss'pairsimple

解决方案

如果您以pair格式导出 EMBOSS 的输出(然后AlignIO.read像以前一样调用),那应该可以解决您的问题。

于 2013-11-25T15:06:42.443 回答