提取基因对应的蛋白质官方名

最开始,是需要将基因跟其编码的蛋白质对应起来,找遍了各种数据库都没发现有相关的注释文件,Uniprot作为处理蛋白质的大佬,结果里都有,肯定有办法能够满足需求。

搜索TP53得到的结果页面,明显有各种p53的蛋白质名称

所幸的是,我完全没想用爬虫直接爬人家,而是戳了一下FAQ

发现人家有官方API,可以供我们胡作非为

Uniprot官方提供了各种API来满足各种稀奇古怪的需求

各种功能的API介绍

Uniprot API的使用

ID信息转换

满足我需求的最重要的部分就是各种ID信息的转换和提取

各种能够转换的ID,上边还有四种常用语言的示例

ID转换相关的页面里包含了所有的能够互相转换的各种ID

相应的,人家提供了多种不同代码的示例,以python为例:

python的示例基于python2

# 导入urllib和urllib2两个模块,用来处理各种网络请求

import urllib,urllib2

# uniprot的api端口

url = 'http://www.uniprot.org/uploadlists/'

# 提交的参数

params = {

# 将什么ID转化成什么ID, from to

# 目前没发现能够转换成多种不同的ID,只能一一转化

'from':'ACC',

'to':'P_REFSEQ_AC',

# 返回结果的格式

'format':'tab',

# 要转换的ID

'query':'P13368 P20806 Q9UM73 P97793 Q17192'

}

# 因为http传输的是bytes等,因此需要将参数转码

data = urllib.urlencode(params)

# 通过Request指定获取哪台服务器的什么信息

request = urllib2.Request(url, data)

# 你自己的邮箱,如果有问题,人家好联系(比如API使用的频率太高,人家服务器受不了)

contact = "" # Please set your email address here to help us debug in case of problems.

# 添加相应的标准提取头,不是这个信息,应该就提取不到任何信息了

request.add_header('User-Agent', 'Python %s' % contact)

# 打开url,获取服务器返回的信息

response = urllib2.urlopen(request)

# 就只读取前多少个字符

page = response.read(200000)

由于我是python3的使用者,所以,没法拿来主义,经过简单修改就正常使用了

经过对众多ID的测试之后发现,其他ID转化成ACC的时候,包含的信息量格外的多,其中就有我急需的蛋白质名称,因此,通过将一个基因名转化成ACC来测试一下看看,能不能提取到该基因编码蛋白的所有名称

#!/usr/bin/python3

# python3将urllib2拆分了,因此,从urllib里分别导入

from urllib.parse import urlencode

from urllib.request import urlopen, Request

def test(query=['TP53']):

# 依然是这个接口

url = 'http://www.uniprot.org/uploadlists/'

params = {

# 针对我最初的需求,from暂时改成gene name

'from': 'GENENAME',

# 是的,我在ACC里发现,protein name了,虽然只有推荐名,其他的名字统统没有

'to': 'ACC',

'format': 'tab',

# 以list的形式传递基因名啥的,通过join就修成需要的字符串了

'query': ' '.join(query)

}

# urlencode只是将字典形式的参数转换成字符串而已,并不能转成bytes,因此,需要多一层encode

data = urlencode(params).encode()

# 同上

request = Request(url, data)

# Please set your email address here to help us debug in case of problems.

contact = "xxxxx@gmail.com"

request.add_header('User-Agent', 'Python %s' % contact)

response = urlopen(request)

page = response.read(200000)

# 获取到的信息是bytes编码的,需要以utf-8等解码才正常读取

print(page.decode('utf-8'))

但是,解码出来的是一个以\n \t分隔的完整字符串,为了能够正常提取所需信息,需要对其进行分割

print出来当然就是一个文本文件的样子

# 将API返回的结果,调用函数进行有效分割,我的用法如下

split_(page.decode('utf-8')) # 上边最后的那一行print(),就改成这么用就好了

def split_(data):

# 按行分割,如同打开一个文件按行读取

data = data.split('\n')

resutls = set()

for line in data:

# 我只要人体的

if 'Homo sapiens' in line:

# 将每一行,按照\t来分割,原因很明显,按空白符分割就分割的太碎,不利于各种信息的提取

# 数一数,就会发现,蛋白名称是每行的倒数第四列

protein_name = line.split('\t')[-4]

# 每个蛋白编码名称后边都会有一个括号的注释,比较烦,就通过分割去掉

protein_name = protein_name.split(' (')[0]

# 然后加到set里边,去除重复

results.add(protein_name)

return results

# 嫌上边的写法麻烦就改成一行实现上边的功能

def split_(data):

reutrn set(line.split('\t')[-4].split(' (')[0] for line in data if 'Homo sapiens' in line)

分割的成果

最终,我们就能获取到TP53基因对应的蛋白质名称了

TP53编码蛋白的所有名称

然后通过反复的爬取,将结果储存为json,或者直接存到数据库中,方便以后的取用都方便的很

如果要用模糊匹配来验证某些东西,推荐使用fuzzyfinder和fuzzywuzzy这两个python模块

其次,还有一个mygene的模块用来提取各种基因的信息也是极妙的,配合上这个API可以做很多幺蛾子。

特别需要注意的一点就是,如果要短时间内大批量的调用这个API,随机设一个sleep延迟吧,如果给对方造成太大的服务器压力,给人家惹麻烦,如果人家觉着需要维护,或者难以维持,直接暂停提供服务,,,

python 病毒 基因_#Python#提取基因对应的蛋白质名相关推荐

  1. python病毒扫描器_基于Python的病毒扫描机制

    构建集中式病毒扫描机制(ClamAV) Clam AntiVirus(ClamAV)是一款免费而且开源的防毒软件,软件与病毒库的更新皆有社区免费发布,官网地址:http://www.clamav.ne ...

  2. python知识笔记_[Python笔记]第一篇:基础知识

    二.为什么要使用Python 优点: 学习成本低 开发效率高–拥有丰富而且强大的第三方库 高级语言–不用关心底层运作细节 可扩展性–Python是一门胶水语言,能于其他语言如C ,C#进行扩展 缺点: ...

  3. python keyboard模块_[python] PyMouse、PyKeyboard用python操作鼠标和键盘

    1.PyUserInput 简介 PyUserInput是一个使用python的跨平台的操作鼠标和键盘的模块,非常方便使用.支持的平台及依赖如下: Linux - Xlib Mac - Quartz, ...

  4. 查python的软件_[Python实战]Python制作天气查询软件

    以前,公众号分享了如何使用 PyQt5 制作猜数游戏和计时器,这一次,我们继续学习:如何使用 PyQt5 制作天气查询软件. 开发环境Python3 PyQt5 requests 准备工作 首先要获取 ...

  5. 如何用python获取文献_[python]eutilities获取文献题录

    之前这篇文章(路人乙小明:用entrez eutilities来查pubmed文献)提过如何利用entrez eutilities查找文献.当时在最后面获取论文摘要和题录的部分直接用了text的模式. ...

  6. python网易云_[Python] 网易云歌单/歌曲下载

    界面化 可以根据歌单 / 歌曲ID 下载 歌单/歌曲. eg: 歌单ID: https://music.163.com/#/playlist?id=3233380300 中的 3233380300 运 ...

  7. 小甲鱼python猜题_[Python]小甲鱼Python视频第033课(except)课后题及参考解答

    # -*- coding: utf-8 -*- """ Spyder Editor This is a temporary script file. "&quo ...

  8. python办公自动化代码_[Python] 自动化办公 邮件操作基础知识及代码(下)

    转载请注明:陈熹 chenx6542@foxmail.com (简书号:半为花间酒) 若公众号内转载请联系公众号:早起Python 这篇文章能学到的主要内容: imbox 收取邮件 poplib 收取 ...

  9. python就业视频_[Python] python就业班 900集 视频学习教

    01基础\* }+ F/ M- b6 v0 x) F( j% S 02Python核心编程\ 03数据结构与算法\5 C0 ~5 l2 x; S# k2 Z" a/ _" {) q ...

最新文章

  1. 中下层确实没钱了,消费枯竭!?
  2. AutoIt3(AU3)开发的智能驱动安装工具,用于系统封装,支持参数静默启动
  3. 008_tracker.conf配置详情
  4. python怎么网络通信_深入Python中的网络通信
  5. ADO winform注册
  6. gitlab备份与恢复操作整理
  7. spring实现IOC的思路和方法
  8. 口罩人脸检测与分类开源代码汇总
  9. 金融危机下的企业经营战略
  10. 4x4矩阵键盘工作原理及扫描程序_单片机学习:单片机独立按键和矩阵键盘概念及原理...
  11. 【读书笔记】深入浅出数据分析
  12. Maxwell 介绍
  13. 传智健康(黑马项目)
  14. html ajax传参数 20,jQuery Ajax传参
  15. day16正则表达式作业
  16. 业务侧-到底应该怎么做A/Btest
  17. 为什么街上发传单的人会认真发完,却不把传单丢了呢?
  18. 微信小程序请求后台接口(完整版)
  19. 外贸找客户软件:Email Extractor Pro 7.2.X
  20. 【Android视频 之 阿里云视频播放器 二】

热门文章

  1. AutoCAD Civil 3D-加宽与超高
  2. 微信wifi认证的实现方式和功能——时讯wifi认证
  3. 关于STM32H7的串口DMA的使用
  4. 固态硬盘迁移及0xc00000e错误码解决方案
  5. 谷歌要抛弃Android拥抱Andromeda
  6. 使用嵌套循环打印图形
  7. JS数字转大写 (会计最爱)
  8. 提高工作效率必备的生产力工具
  9. rp导入图片大小_Axure制作图像的放大与缩小效果的四种方式
  10. 内网渗透-最实用的横向移动总结