我试图通过KEGG通过生物服务获取有关基因列表的特定信息。问题是,我事先不知道单个基因属于哪一个有机体;在我的清单中,很多基因都属于不同的有机体。我的问题是,我不知道如何在不指定有机体的情况下检索所需的基因信息。
举一个例子:
gene_list = ['YMR293C', 'b3640']
第一基因属于酵母,第二个属于E.coli。
如果我现在试着:
from bioservices import *
kegg_con = KEGG()
res = kegg_con.get('b3640', parse=True)['NAME']
我最后得到了一个TypeError
kegg_con.get('b3640', parse=True)
不返回字典,而只返回一个数字(因为我没有指定它所属的有机体)。然而,当我指定有机体(这里是eco
代表E.coli)时,这是可行的:
kegg_con.get('eco:b3640', parse=True)['NAME']
返回
[u'dut']
这是正确的,因为我们可以看到这里
然后,我试图通过使用发现获取有关相关有机体的信息。这对于YMR293C
很好,但对于b3640
却失败。
kegg_con.find('genes', 'YMR293C')
返回
U‘S : YMR293C \tHER2 2,GEP6,QRS1,RRG6;谷氨酰-tRNA(Gln)酰胺基转移酶亚基HER2 (EC:6.3.5.7);天冬氨酰-tRNA(Asn)/谷氨酰-tRNA(Gln)氨基转移酶A亚基A EC:6.3.5.6 6.3.5.7\n ncal:ncal 19.11438\n可能与酿酒酵母YMR293C线粒体谷氨酰基-tRNA酰胺基转移酶相似:CaO19.3956类似于线粒体谷氨酰转移酶YMR293C推测的谷氨酰基-tRNA;K02433天冬氨酰-tRNA/谷氨酰-tRNA氨基转移酶亚基A EC:6.3.5.6 6.3.5.7\n‘
但是,当我运行时,我可以很容易地提取所需的信息(在本例中是:sce:YMR293C
)。
kegg_con.find('genes', 'b3640')
我得到了
U‘’cnb:‘cnb 3640\胸腺肽蛋白;K06316寡糖易位蛋白RFT1\ncgi:CGB_B3640C\thypothetical蛋白\neco:b 3640\tdut;脱氧尿嘧啶三磷酸酶(EC:3.6.1.23);K01520 dUTP焦磷酸酶EC:3.6.1.23\nsea:SeAg_B3640\tbfd;细菌铁蛋白相关铁氧还蛋白;K02192细菌铁蛋白相关铁氧还蛋白:nyps 3640\保守假想protein\nreu:Reut_B3640\tconserved假想蛋白\nbbr:EC 3640\tphage相关蛋白出口蛋白\nmag:nmag 3640\胸腺嘧啶核苷钩相关蛋白;K02407鞭毛钩相关蛋白2\ncbi:CLJ_B3640\tconserved假想蛋白;K09963未表征蛋白\nmmo:nmmo 3640\胸腺蛋白\nmbo:mb3640ctftsH;膜结合蛋白酶FTSH (细胞分裂蛋白) (EC:3.4.24.-);K03798细胞分裂蛋白酶FtsH EC:3.4.24.
它不提供有关E.coli的信息。
因此,我的问题是:
( 1)是否有一种方法,使我可以只根据基因ID 来获取有关基因的信息,而不需要指定它所属的生物体?
2)获取基因所属的生物信息的最佳方法是什么?为什么find
在我搜索E.coli基因时失败了?
发布于 2016-05-28 16:19:22
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,生物服务的主要作者
https://stackoverflow.com/questions/37484095
复制相似问题