Экземпляр класса Biopython -вывод из Entrez.read :Я не знаю, как манипулировать выводом

Я пытаюсь загрузить XML-файл из Pubmed -, проблем нет, Biopython великолепен. Проблема в том, что я действительно не знаю, как манипулировать выводом. Я хочу поместить большую часть проанализированного xml в базу данных sql, но я не знаком с выводом. Для некоторых вещей я могу назвать проанализированный xml как словарь, но для других это не кажется таким уж прямым.

from Bio import Entrez
Entrez.email="xxxxxxxxxxxxx@gmail.com"
import sqlite3 as lite
handle=Entrez.efetch(db='pubmed',id='22737229', retmode='xml')
record = Entrez.read(handle)

Если я хочу найти название, я могу сделать это:

title=record[0]['MedlineCitation']['Article']['ArticleTitle']

Но тип анализируемого объекта — это класс:

>>> type(record)
<class 'Bio.Entrez.Parser.ListElement'>
>>>r=record[0]
>>>type(r)
<class 'Bio.Entrez.Parser.DictionaryElement'>
>>> r.keys()
[u'MedlineCitation', u'PubmedData']

Это заставляет меня думать, что должен быть гораздо более простой способ сделать это, чем использовать его в качестве словаря. Но когда я пытаюсь:

>>> r.MedlineCitation

Traceback (most recent call last):
  File "<pyshell#67>", line 1, in <module>
    r.MedlineCitation
AttributeError: 'DictionaryElement' object has no attribute 'MedlineCitation'

Это не работает. Я, конечно, могу использовать его как словарь, но позже у меня возникнут проблемы.

Настоящая проблема заключается в попытке получить определенную информацию из записи при использовании ее как словаря :

>>> record[0]['MedlineCitation']['PMID']
StringElement('22737229', attributes={u'Version': u'1'})

. Это означает, что я не могу просто плюнуть (это технический термин; )в мою базу данных sql, но нужно преобразовать:

>>> t=record[0]['MedlineCitation']['PMID']
>>> t
StringElement('22737229', attributes={u'Version': u'1'})
>>> int(t)
22737229
>>> str(t)
'22737229'

В целом я доволен глубиной информации, которую предоставляет Entrez.read (), но я не уверен, как легко использовать информацию в результирующем экземпляре класса. Обычно вы можете просто делать что-то вроде

record.MedlineCitation

но это не работает.

Привет

Уитон

6
задан Wheaton Little 4 July 2012 в 04:09
поделиться