我正在尝试从Pubmed下载一些xml-那里没有问题,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)
Run Code Online (Sandbox Code Playgroud)
如果要查找标题,可以执行以下操作:
title=record[0]['MedlineCitation']['Article']['ArticleTitle']
Run Code Online (Sandbox Code Playgroud)
但是解析对象的类型是一个类:
>>> type(record)
<class 'Bio.Entrez.Parser.ListElement'>
>>>r=record[0]
>>>type(r)
<class 'Bio.Entrez.Parser.DictionaryElement'>
>>> r.keys()
[u'MedlineCitation', u'PubmedData']
Run Code Online (Sandbox Code Playgroud)
这使我认为,必须比将其用作字典要容易得多。但是当我尝试:
>>> r.MedlineCitation
Traceback (most recent call last):
File "<pyshell#67>", line 1, in <module>
r.MedlineCitation
AttributeError: 'DictionaryElement' object has no attribute 'MedlineCitation'
Run Code Online (Sandbox Code Playgroud)
没用 我显然可以将其用作字典,但是后来我遇到了问题。
真正的问题是试图像字典一样使用记录时从记录中获取某些信息:
>>> record[0]['MedlineCitation']['PMID']
StringElement('22737229', attributes={u'Version': u'1'})
Run Code Online (Sandbox Code Playgroud)
这意味着我不能只将它(这是一个技术术语;)放入我的sql数据库中,而是需要对其进行转换:
>>> t=record[0]['MedlineCitation']['PMID']
>>> t
StringElement('22737229', attributes={u'Version': u'1'})
>>> int(t)
22737229
>>> str(t)
'22737229'
Run Code Online (Sandbox Code Playgroud)
总而言之,我对Entrez.read()提供的信息深度感到高兴,但是我不确定如何轻松地在结果类实例中使用该信息。通常你可以做这样的事情
record.MedlineCitation
Run Code Online (Sandbox Code Playgroud)
但这不起作用。
干杯
惠顿