📅  最后修改于: 2020-11-09 05:02:46             🧑  作者: Mango
Entrez是NCBI提供的在线搜索系统。它通过集成的全局查询(支持布尔运算符和字段搜索)提供对几乎所有已知分子生物学数据库的访问。它从所有数据库返回结果,并提供诸如每个数据库的命中数,带有原始数据库链接的记录等信息。
下面列出了一些可以通过Entrez访问的流行数据库-
除上述数据库外,Entrez还提供更多数据库来执行现场搜索。
Biopython提供了一个Entrez特定模块Bio.Entrez来访问Entrez数据库。让我们在本章中学习如何使用Biopython访问Entrez-
要添加Entrez的功能,请导入以下模块-
>>> from Bio import Entrez
接下来设置您的电子邮件以识别谁与下面给出的代码相关联-
>>> Entrez.email = ''
然后,设置Entrez工具参数,默认情况下为Biopython。
>>> Entrez.tool = 'Demoscript'
现在,调用einfo函数以查找索引术语计数,上次更新以及每个数据库的可用链接,如下所示-
>>> info = Entrez.einfo()
einfo方法返回一个对象,该对象通过其read方法提供对信息的访问,如下所示-
>>> data = info.read()
>>> print(data)
pubmed
protein
nuccore
ipg
nucleotide
nucgss
nucest
structure
sparcle
genome
annotinfo
assembly
bioproject
biosample
blastdbinfo
books
cdd
clinvar
clone
gap
gapplus
grasp
dbvar
gene
gds
geoprofiles
homologene
medgen
mesh
ncbisearch
nlmcatalog
omim
orgtrack
pmc
popset
probe
proteinclusters
pcassay
biosystems
pccompound
pcsubstance
pubmedhealth
seqannot
snp
sra
taxonomy
biocollections
unigene
gencoll
gtr
数据为XML格式,要获取数据作为Python对象,请在调用Entrez.einfo()方法后立即使用Entrez.read方法-
>>> info = Entrez.einfo()
>>> record = Entrez.read(info)
在这里,record是一个字典,它有一个键,DbList,如下所示-
>>> record.keys()
[u'DbList']
访问DbList键返回数据库名称列表,如下所示-
>>> record[u'DbList']
['pubmed', 'protein', 'nuccore', 'ipg', 'nucleotide', 'nucgss',
'nucest', 'structure', 'sparcle', 'genome', 'annotinfo', 'assembly',
'bioproject', 'biosample', 'blastdbinfo', 'books', 'cdd', 'clinvar',
'clone', 'gap', 'gapplus', 'grasp', 'dbvar', 'gene', 'gds', 'geoprofiles',
'homologene', 'medgen', 'mesh', 'ncbisearch', 'nlmcatalog', 'omim',
'orgtrack', 'pmc', 'popset', 'probe', 'proteinclusters', 'pcassay',
'biosystems', 'pccompound', 'pcsubstance', 'pubmedhealth', 'seqannot',
'snp', 'sra', 'taxonomy', 'biocollections', 'unigene', 'gencoll', 'gtr']
>>>
基本上,Entrez模块解析Entrez搜索系统返回的XML,并将其提供为Python字典和列表。
要搜索任何一个Entrez数据库,我们可以使用Bio.Entrez.esearch()模块。它定义如下-
>>> info = Entrez.einfo()
>>> info = Entrez.esearch(db = "pubmed",term = "genome")
>>> record = Entrez.read(info)
>>>print(record)
DictElement({u'Count': '1146113', u'RetMax': '20', u'IdList':
['30347444', '30347404', '30347317', '30347292',
'30347286', '30347249', '30347194', '30347187',
'30347172', '30347088', '30347075', '30346992',
'30346990', '30346982', '30346980', '30346969',
'30346962', '30346954', '30346941', '30346939'],
u'TranslationStack': [DictElement({u'Count':
'927819', u'Field': 'MeSH Terms', u'Term': '"genome"[MeSH Terms]',
u'Explode': 'Y'}, attributes = {})
, DictElement({u'Count': '422712', u'Field':
'All Fields', u'Term': '"genome"[All Fields]', u'Explode': 'N'}, attributes = {}),
'OR', 'GROUP'], u'TranslationSet': [DictElement({u'To': '"genome"[MeSH Terms]
OR "genome"[All Fields]', u'From': 'genome'}, attributes = {})], u'RetStart': '0',
u'QueryTranslation': '"genome"[MeSH Terms] OR "genome"[All Fields]'},
attributes = {})
>>>
如果您分配了不正确的数据库,则它将返回
>>> info = Entrez.esearch(db = "blastdbinfo",term = "books")
>>> record = Entrez.read(info)
>>> print(record)
DictElement({u'Count': '0', u'RetMax': '0', u'IdList': [],
u'WarningList': DictElement({u'OutputMessage': ['No items found.'],
u'PhraseIgnored': [], u'QuotedPhraseNotFound': []}, attributes = {}),
u'ErrorList': DictElement({u'FieldNotFound': [], u'PhraseNotFound':
['books']}, attributes = {}), u'TranslationSet': [], u'RetStart': '0',
u'QueryTranslation': '(books[All Fields])'}, attributes = {})
如果要跨数据库搜索,则可以使用Entrez.egquery 。这与Entrez.esearch相似,只不过它足以指定关键字并跳过数据库参数。
>>>info = Entrez.egquery(term = "entrez")
>>> record = Entrez.read(info)
>>> for row in record["eGQueryResult"]:
... print(row["DbName"], row["Count"])
...
pubmed 458
pmc 12779 mesh 1
...
...
...
biosample 7
biocollections 0
Enterz提供了一种特殊的方法,即从Entrez检索和下载记录的全部详细信息。考虑以下简单示例-
>>> handle = Entrez.efetch(
db = "nucleotide", id = "EU490707", rettype = "fasta")
现在,我们可以简单地使用SeqIO对象读取记录
>>> record = SeqIO.read( handle, "fasta" )
>>> record
SeqRecord(seq = Seq('ATTTTTTACGAACCTGTGGAAATTTTTGGTTATGACAATAAATCTAGTTTAGTA...GAA',
SingleLetterAlphabet()), id = 'EU490707.1', name = 'EU490707.1',
description = 'EU490707.1
Selenipedium aequinoctiale maturase K (matK) gene, partial cds; chloroplast',
dbxrefs = [])