我正在尝试从 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)
如果我想找到标题,我可以这样做:
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
但它不起作用。
干杯
惠顿