Biopython是python的一个库,这个库可以解决很多生物上的问题,使大量的生物数据简单化,是个很好用的包。
对于数据库上的各种信息,有专门的函数处理,不用按照常规的文本处理方法,写大量的代码。比如很常见的报告中展示的参考文献,一般思路是有了文章的PMID,然后通过爬虫的方法,获取这些文章的title,author,source等信息。
在Biopython中有自己独特的解决方法。在NCBI中,搜索与epilepsy有关的文章,并输出相关信息。
from Bio import Entrez
Entrez.email = '[email protected]' # always tell who you are
handle = Entrez.egquery(term="epilepsy")
record = Entrez.read(handle)
for row in record["eGQueryResult"]:
if row["DbName"]=="pubmed":
print row["Count"] #total is 143833
可以看到在PubMed数据库中有epilepsy有关的文章有143833,所以取前40个看下输出的信息是什么。
handle = Entrez.esearch(db="pubmed", term="epilepsy", retmax=463)
record = Entrez.read(handle)
idlist = record["IdList"]
print idlist[0:40]
输入上面的PMID,去验证一下是否真的和 epilepsy有关,发现是真的。取前10个测试一下。
parse对于大文件使解析使用,变成一个迭代器。
id =idlist[0:10]
from Bio import Medline
handle = Entrez.efetch(db="pubmed", id=id, rettype="medline",retmode="text")
records = Medline.parse(handle)
records = list(records) #records 是一个迭代器,所以只能访问这些records一次。如果想保存这些records,需要把他们转成列表。
for record in records:
print "title:", record.get("TI", "?")
print "authors:", record.get("AU", "?")
print "source:", record.get("SO", "?")
print
对于大量的数据,可以通过history来操作。具体见https://biopython-cn.readthedocs.io/zh_CN/latest/cn/chr09.html#sec-entrez-specialized-parsers。