如何处理Biopython Entrez efetch的结果?

1 投票
1 回答
831 浏览
提问于 2025-04-19 09:25

当我运行以下代码时;

from Bio.Blast import NCBIWWW
from Bio import Entrez, SeqIO
Entrez.email = "A.N.Other@example.com"
handle = Entrez.efetch(db="Protein", id= "75192198", rettype = "xml")
record = Entrez.read(handle)

我得到一个叫“Bio.Entrez.Parser.DictionaryElement”的东西,这个东西查找起来非常麻烦。如果我想获取氨基酸序列,我必须输入类似这样的代码;

record["Bioseq-set_seq-set"][0]["Seq-entry_seq"]["Bioseq"]["Bioseq_inst"]["Seq-inst"]["Seq-inst_seq-data"]["Seq-data"]["Seq-data_iupacaa"]["IUPACaa"]

我知道应该有更简单的方法来索引这些结果中的元素。如果有人能帮我一下,我会非常感激。

1 个回答

2

如果你想要的是序列数据,那就不要用“xml”格式来查询,而是可以用(比如说)FASTA格式来查询,只需要把rettype这个参数改一下。然后用SeqIO来解析就很简单了。

handle = Entrez.efetch(db="Protein", id= "75192198", rettype = "fasta")

for r in SeqIO.parse(handle, "fasta"):
    print r.id, r.seq

这样做是因为handle里的内容看起来像:

print handle.read()
# >gi|75192198|sp|Q9MAH8.1|TCP3_ARATH RecName: Full=Transcription factor TCP3
# MAPDNDHFLDSPSPPLLEMRHHQSATENGGGCGEIVEVQGGHIVRSTGRKDRHSKVCTAKGPRDRRVRLS
# APTAIQFYDVQDRLGFDRPSKAVDWLITKAKSAIDDLAQLPPWNPADTLRQHAAAAANAKPRKTKTLISP
# PPPQPEETEHHRIGEEEDNESSFLPASMDSDSIADTIKSFFPVASTQQSYHHQPPSRGNTQNQDLLRLSL
# QSFQNGPPFPNQTEPALFSGQSNNQLAFDSSTASWEQSHQSPEFGKIQRLVSWNNVGAAESAGSTGGFVF
# ASPSSLHPVYSQSQLLSQRGPLQSINTPMIRAWFDPHHHHHHHQQSMTTDDLHHHHPYHIPPGIHQSAIP
# GIAFASSGEFSGFRIPARFQGEQEEHGGDNKPSSASSDSRH

如果你还想要一些其他的元信息(比如基因中的转录因子结合位点,或者生物的分类信息),你也可以通过把参数rettype="gb"改成genbank格式来下载这些信息,然后用"gb"来解析。想了解更多,可以在这个例子中查看

撰写回答