2016-07-27 99 views
1

我是Biopython的新手,解析genbank文件时出现性能问题。仅使用biopython下载genbank文件的一部分

我必须解析很多gb文件,我从中获得了编号。解析后,我只想检查文件的分类和机构。现在,我有这样的代码:

from Bio import SeqIO 
from Bio import Entrez 
gb_acc1 = Entrez.efetch(db='nucleotide', id=access1, rettype='gb', retmode='text') #Where access1 contents the accession number 
rec = SeqIO.read(gb_acc1, 'genbank') 
cache[access1] = rec #where cache is just a dictionary where saving the gb files already downloaded 
feat = cache[access1].features[0] 
if 'organelle' in feat.qualifiers.keys(): #And the code goes on 

为了查找分类我:

gi_h = Entrez.efetch(db='nucleotide', id=access, rettype='gb', retmode='text') 
    gi_rec = SeqIO.read(gi_h, 'genbank') 
    cache[access]=gi_rec 
    if cache[access].annotations['taxonomy'][1] == 'Fungi': 
           fungi += 1 #And the code goes on 

这(整个脚本)工作正常。我的问题是,我正在下载整个gb文件(有时很大),只是为了研究这两个功能:细胞器和分类。如果我只能下载gb文件的这部分,我的脚本将会快得多,但我还没有想出如果这是可能的。

有人知道这是否可以完成,如果是这样,如何?提前致谢

回答

1

您可以使用seq_start and seq_stop截断您的序列,然后像以前一样解析它,例如,

gb_acc1 = Entrez.efetch(db='nuccore', id=access1, rettype='gb', retmode='xml', seq_start=1, seq_stop=1) 

也许你甚至不需要存储整个基因库文件,但与ID为重点和分类学和细胞器的值仅一本字典?

+0

谢谢!这两个建议都是一个不错的主意,似乎加快了脚本的速度。但是,仍然不是我正在寻找的最佳解决方案。检查例如这个GB文件http://www.ncbi.nlm.nih.gov/nuccore/CP015199这里的问题不是序列,但大量的feautres(CDS,基因),我仍然下载,而不是事后调查。但是,谢谢! – VictorBello

相关问题