我有一组(蛋白质)序列是使用软件发现的,但它们的长度比数据库中的原始序列短。我下载了整个数据库,现在我有这些不完整的序列已找到的以及找到序列的原始数据库。
软件的示例结果:
>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不起作用。
提前致谢
答案 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文件