Когда я запускаю следующее;
from Bio.Blast import NCBIWWW
from Bio import Entrez, SeqIO
Entrez.email = "[email protected]"
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 · David Robinson
Если вам нужна последовательность, то вместо того, чтобы запрашивать ее в формате "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" и проанализировав его с помощью "gb". Вы можете узнать больше об этом в примере здесь.