python - 如何使用生物服务在不指定生物体的情况下访问 KEGG 条目?

标签 python web-services bioservices

我尝试访问KEGG通过 bioservices获取有关基因列表的某些信息。问题是我事先并不知道各个基因属于哪个生物体;在我的列表中可能有很多基因,它们都属于不同的生物体。我的问题是,我不知道如何在不指定生物体的情况下检索有关基因的所需信息。

举个例子:

gene_list = ['YMR293C', 'b3640']

first gene属于酵母,而second one属于大肠杆菌。

如果我现在尝试:

from bioservices import *
kegg_con = KEGG()
res = kegg_con.get('b3640', parse=True)['NAME']

以来,我最终遇到了 TypeError
kegg_con.get('b3640', parse=True)

不返回字典,而只返回一个数字(因为我没有指定它所属的有机体)。然而,当我指定生物体时,这是有效的(这里是 eco ,代表大肠杆菌):

kegg_con.get('eco:b3640', parse=True)['NAME']

返回

[u'dut']

正如人们所见,这是正确的 here :

enter image description here

然后我尝试使用 find 获取有关相关生物体的信息。 。对于 YMR293C 效果很好,但对于 b3640 则失败:

kegg_con.find('genes', 'YMR293C')

返回

u'sce:YMR293C\tHER2, GEP6, QRS1, RRG6; glutamyl-tRNA(Gln) amidotransferase subunit HER2 (EC:6.3.5.7); K02433 aspartyl-tRNA(Asn)/glutamyl-tRNA(Gln) amidotransferase subunit A [EC:6.3.5.6 6.3.5.7]\ncal:CaO19.11438\tlikely amidase similar to S. cerevisiae YMR293C mitochondrial putative glutamyl-tRNA amidotransferase\ncal:CaO19.3956\tlikely amidase similar to S. cerevisiae YMR293C mitochondrial putative glutamyl-tRNA amidotransferase; K02433 aspartyl-tRNA(Asn)/glutamyl-tRNA(Gln) amidotransferase subunit A [EC:6.3.5.6 6.3.5.7]\n'

我可以轻松地从中提取所需的信息(在本例中:sce:YMR293C),但是,当我运行时

 kegg_con.find('genes', 'b3640')

我明白了

u'cnb:CNBB3640\thypothetical protein; K06316 oligosaccharide translocation protein RFT1\ncgi:CGB_B3640C\thypothetical protein\neco:b3640\tdut; deoxyuridinetriphosphatase (EC:3.6.1.23); K01520 dUTP pyrophosphatase [EC:3.6.1.23]\nsea:SeAg_B3640\tbfd; bacterioferritin-associated ferredoxin; K02192 bacterioferritin-associated ferredoxin\nyps:YPTB3640\tconserved hypothetical protein\nreu:Reut_B3640\tconserved hypothetical protein\nbbr:BB3640\tphage-related exported protein\nmag:amb3640\thypothetical protein\nbcg:BCG9842_B3640\tflagellar hook-associated protein; K02407 flagellar hook-associated protein 2\ncbi:CLJ_B3640\tconserved hypothetical protein; K09963 uncharacterized protein\nmmo:MMOB3640\thypothetical protein\nmbo:Mb3640c\tftsH; membrane-bound protease FTSH (cell division protein) (EC:3.4.24.-); K03798 cell division protease FtsH [EC:3.4.24.-]\n'

其中不提供有关大肠杆菌的信息。

因此我的问题是:

1) 有没有一种方法可以让我仅根据基因 ID 来访问基因的信息,而无需指定其所属的生物体?

2) 检索该基因属于哪个生物体的信息的最佳方法是什么?为什么当我搜索大肠杆菌基因时 find 失败?

最佳答案

find() 方法的输出是一个纯字符串,不容易阅读,但我相信您要查找的信息就在输出中。在第三行,您可以看到:

eco:b3640

现在,我不确定 KEGG 的输出格式是否始终具有相同的结构。如果是这样,假设感兴趣的行是第三行,您可以使用:

res = kegg_con.find('genes', 'b3640') 
orgnanism = res.split("\n")[2].split()[0].split(":")[0]

您可以进一步检查它是否是一个有效的生物体,如下所示:

assert organism in kegg_con.organismIds

为了安全起见,您可以在字符串中搜索标识符(而不是采用第三行):

[x for x in res.split() if "b3640" in x]

希望对你有帮助

TC,bioservices的主要作者

关于python - 如何使用生物服务在不指定生物体的情况下访问 KEGG 条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37484095/

相关文章:

python - 您可以使用 python 在命令提示符下键入文本并按回车键吗?

c++ - 使用 gSOAP 时如何将数据从客户端传递到服务器?

java - Web服务如何从url Web服务获取wsdl

python - python 中的异常处理和继续 for 循环

python - xmltodict: ExpatError: 语法错误: 第 1 行,第 0 列,从 QuickGO 获取 xml

python - 如何在 python 中下载彩色 KEGG PATHWAY map

python - 在 0 和 1 之间进行归一化,忽略 NaN

python - 多个列表之间的独特功能

python - Pandas:如何访问索引的值

c# - 如何从 jQuery AJAX 调用向 UI 反馈代码隐藏进程的当前进度