2014-08-28 72 views
0

一GBK文件,我写了一个使用基因库文件Biopython从GBK文件的序列部分,其同事在工作中使用给出获取基因序列的脚本。Biopython不解析基因组序列

现在我们遇到了一些新的数据集问题,事实证明,下载的GBK文件没有包含序列(从NCBI的GenBank网站下载时很容易发生)。当使用record.seq[start:end]时,Biopython不会输出错误,而是返回一长串N。从一开始就通过错误消息来停止脚本的最简单方法是什么?

+1

请[编辑]与[MCVE](HTTP你的问题:// stackoverflow.com/help/mcve)显示你现在在做什么。请包括2个输入 - 一个正常的GenBank文件(包含一个序列)和一个不包含序列的文件。如果不知道你在做什么,很难就如何改变建议提供建议。 – MattDMo 2014-08-28 15:54:06

+0

对不起,我以为曾经使用GenBank和BioPython的人不需要输入文件。当然,我应该包括代码。到目前为止,我已经找到了自己的解决方案,所以我希望你不介意我是否不想在这里找到提供文件的方法。无论如何,谢谢,这个解决方案在尝试准备MCVE时更容易找到。 – 2014-09-01 11:14:58

回答

0

权,我找到了一种方法。如果我数序列中的Ns和检查的顺序是长有许多人,我知道该序列缺失:

import sys 
from Bio import SeqIO  

for seq_record in SeqIO.parse("sequence.gb", "genbank"): 
    sequence = seq_record.seq 
    if len(sequence) == sequence.count("N"): 
    sys.exit("There seems to be no sequence in your GenBank file!") 

我本来希望检查序列类型,而不是一个解决方案,因为空序列是Bio.Seq.UnknownSeq,而不是Bio.Seq.Seq一个真正的序列,并会心存感激,如果任何人都可以提出在这个方向的东西。

更新

@xbello让我再试一次检查序列类型,现在这也适用:

import sys, Bio 
from Bio import SeqIO  

for seq_record in SeqIO.parse("sequence.gb", "genbank"): 
    sequence = seq_record.seq 
    if isinstance(sequence, Bio.Seq.UnknownSeq): 
    sys.exit("There seems to be no sequence in your GenBank file!") 
+0

当你说“没有序列”或“序列缺失”你的意思是很多“nnnnnnnnn为”或只是一个空洞的序列?你能给一些样本加入吗?如果你只是想检查Seq是否是'Bio.Seq.UnknownSeq',你可以使用'if isinstance(sequence,Bio.Seq.UnknownSeq)'。 – xbello 2014-09-02 08:59:03

+0

如果你去GenBank中下载的东西(如http://www.ncbi.nlm.nih.gov/nuccore/U22660.1),并在这样做之前取消选中下自定义视图“显示序列”对话框右侧该文件将不包含ORIGIN功能下的任何内容。不过,如果你阅读'SeqIO.parse(该文件)',然后尝试提取序列,Biopython将作为序列应该是长期给你无数的纳秒。 – 2014-09-02 09:10:24

+0

到目前为止,'isinstance()'不适合我。这似乎是因为我总是只从'生物进口SeqIO'做过'而且从来没有实际进口'生物'。现在,它的工作,谢谢。 :-) – 2014-09-02 09:11:51