我希望能够从许多 Genbank 记录中看到病毒宿主生物。我已经尝试过通过下载 Genbank 完整文件并使用
Biopython.SeqIO.read()
阅读它们,并且我还尝试通过 Entrez.efetch
查询数据库,这是一个仅使用一个 ID 的示例:
$ pip install biopython
from Bio import Entrez, SeqIO
id = 'CY238774.1'
handle = Entrez.efetch(db='nucleotide', id=id, rettype='gb', retmode='text')
record = SeqIO.read(handle, 'gb')
当我通过网络浏览器在 NCBI 上查找这条 id 记录时,我可以看到记录中写着“host=Homo sapiens”。此文本也存在于下载的 .gb 文件中。但是,我在上面创建的 SeqRecord 对象中的任何位置都找不到此信息。创建 SecRecord 时,此信息似乎会丢失。我已经检查了所有的类属性。
有没有办法从 SeqRecord 中提取这些信息?
当我在 NCBI 上查找此 ID 记录时...
让我们回顾一下该记录:
$ curl -i 'https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nucleotide&id=CY238774.1&rettype=gb&retmode=text&tool=biopython'
...
content-type: text/plain
...
FEATURES Location/Qualifiers
source 1..1002
/organism="Influenza A virus (A/Washington/27/2017(H3N2))"
/mol_type="viral cRNA"
/strain="A/Washington/27/2017"
/serotype="H3N2"
/host="Homo sapiens"
...
所以我们正在寻找功能 --> 来源 --> 主机。
现在让我们切换到 API。 事实证明,返回的第一个功能的类型为 Source。
>>> from pprint import pp
>>>
>>> record.features[0]
SeqFeature(SimpleLocation(ExactPosition(0), ExactPosition(1002), strand=1), type='source', qualifiers=...)
>>>
>>> record.features[0].type
'source'
>>>
>>> pp(record.features[0].qualifiers)
{'organism': ['Influenza A virus (A/Washington/27/2017(H3N2))'],
'mol_type': ['viral cRNA'],
'strain': ['A/Washington/27/2017'],
'serotype': ['H3N2'],
'host': ['Homo sapiens'],
'db_xref': ['taxon:1984973'],
'segment': ['7'],
'country': ['USA: Washington'],
'collection_date': ['01-Mar-2017'],
'note': ['passage details: S2 (2017-03-26)']}
>>>
>>> record.features[0].qualifiers['host'][0]
'Homo sapiens'
哒哒!它潜伏在里面。