使用Python检索缺失的序列-'split'命令不起作用

时间:2012-01-02 15:46:51

标签: python split biopython

我有一组(蛋白质)序列是使用软件发现的,但它们的长度比数据库中的原始序列短。我下载了整个数据库,现在我有这些不完整的序列已找到的以及找到序列的原始数据库。

软件的示例结果:

>tr|E7EWP2|E7EWP2_HUMAN  Uncharacterized protein OS=Homo sapiens GN=TRIO PE=4 SV=2
KEFIMAELIQTEKAYVRDLRECMDTYLWEMTSGVE

数据库中的序列:

>tr|E7EWP2|E7EWP2_HUMAN  Uncharacterized protein OS=Homo sapiens GN=TRIO PE=4 SV=2
ARRKEFIMAELIQTEKAYVRDLRECMDTYLWEMTSGVEEIP

因此缺失的残留物是“ARR”。最后' EIP',我有大约70个这样的不完整序列?我想编写一个Python程序,可以自动从数据库中检索完整的序列。 我是python的新手,当然我会尝试编写自己的代码,我想知道是否有任何库或像biopython模块可以做到这一点。  我的计划是从我的结果中取出间隔,展开它们并在原始数据库中选择它,但我不知道如何继续进行。

我想获得list_seq = [ARR,KEFIMAELIQTEKAYVRDLRECMDTYLWEMTSGVE,EIP],以便我可以进一步使用list_seq[0] r.strip(3)list_seq[1] l.strip[3],以便我获得完整的序列。但是list_seq不起作用。

提前致谢

1 个答案:

答案 0 :(得分:4)

您可以使用BioPython SeqIO中的index方法。 index方法通过蛋白id索引数据库记录,并且不会在内存中加载完整的数据库,从而允许使用完整的大型数据库进行高效搜索(或者您可以使用像sqlite这样的传统dbase来首先存储您的数据库记录并对其进行搜索):

from Bio import SeqIO

db1 = "dbase.fasta"
db2 = "my_collection.fasta"

dbase_dict = SeqIO.index(db1, "fasta")
my_record_dict = SeqIO.index(db2, "fasta")

for record in my_record_dict:
    if record in dbase_dict:
        rec_dbase = dbase_dict[record]
        rec_mine = my_record_dict[record]
        if rec_dbase.seq != rec_mine.seq:
            print rec_dbase

此程序只打印差异记录。从这一点开始,您可以将它们保存在列表中或写入fasta文件