Я пытаюсь загрузить 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
но это не работает.
Привет
Уитон