python 根据染色体起始终止点坐标来获取碱基序列

在工作当中,有时候我们知到染色体编号以及染色体起始终止坐标,我们想知道这段序列是什么样的碱基。其一,我们一般用去UCSC的genome browser里面去查询 ,其实也可以从UCSC的接口去解析网页,然后在提取序列信息比如chr17:7676091,7676196 ,那么我只需要构造下面一个网页地址 http://genome.ucsc.edu/cgi-bin/das/hg38/dna?segment=chr17:7676091,7676196然后 hg38可以更换成hg19,dna?segment= 后面可以按照标准格式更换,就可以返回我们想要的序列了。现在对网页返回 一个xml格式的信息,用python解析一下
  1 import requests
  2 import re
  3 from bs4 import BeautifulSoup
  4 import xlwt
  5 import xlrd
  6 from xlutils.copy import copy
  7 import os ,sys
  8 #print(sys.path)
  9 cwd=os.getcwd()
 10
 11
 12
 13 def getHTMLText(url):
 14     print("111111")
 15     try:
 16         header = {‘user-agent‘: ‘Mozilla/5.0‘}
 17         r = requests.get(url,headers = header,timeout = 30 )
 18         r.raise_for_status()
 19         r.encoding =r.apparent_encoding
 20         print("get 222222222222222")
 21         return r.text
 22     except:
 23         return ""
 24
 25 def fillDNAList(dnalist, html):
 26     # 使用正则表达式获取dna 序列的头文件
 27     match = re.search(‘SEQUENCE([\s\S]*?version="1.00")‘, html)
 28     print("match ok")
 29     if match:
 30         dna_header = re.search(‘SEQUENCE([\s\S]*?version="1.00")‘, html)
 31         #print(‘10====>‘, dna_header.group())
 32         #dna_header 存到列表
 33         dnalist.append(dna_header.group())
 34
 35     match = re.search(‘DNA.*?length="(\d*)"‘, html)
 36     if match:
 37         length_header= re.search(‘DNA.*?length="(\d*)"‘, html)
 38         #print(‘11=====>‘, length_header.group())
 39         dnalist.append(length_header.group())
 40
 41     #使用 BeautifulSoup
 42     print("BeautifulSoup tag属性 获取dna标签属性的字符串部分")
 43     soup = BeautifulSoup(html, ‘html.parser‘)
 44     tag = soup.dna
 45     seq = soup.dna.string
 46     seq = seq.replace(‘\n‘,‘‘).upper()  #换行符删除掉,转换成大写
 47     # seq 存到列表
 48     dnalist.append(seq)
 49     print("final======>",dnalist)
 50     return dnalist
 51
 52 def write_excell(dnalist,chrnum,pos):
 53     head = ‘>hg19‘ + ‘ ‘ + dnalist[0] + dnalist[1]
 54     f = xlwt.Workbook(encoding=‘utf-8‘, style_compression=0) #创建新的Excel(新的workbook)
 55     sheet = f.add_sheet(‘test8‘, cell_overwrite_ok=True) #创建新的表单
 56     # 先写第一行的头文件
 57     sheet.write(0,0,head)
 58     #再从第二行开始写,每行写入50 个字符串
 59     dna = dnalist[2]
 60     print(‘=====‘,dna,type(dna))
 61     for i in range(0,len(dna),50):
 62         sheet.write((int((i+1)/50))+1,0,dna[i:i+50])
 63
 64     out_file = ‘chrmosome%s_%s.xls‘% (chrnum,pos)
 65     f.save(out_file)
 66     out_file_dir = os.path.join(cwd, out_file)
 67     return out_file_dir
 68
 69 def modify_excell(out_file_dir,chrnum,pos):
 70     ‘‘‘
 71     改Excel表(xlutils模块)
 72     :return:
 73     ‘‘‘
 74     rb = xlrd.open_workbook(out_file_dir)  # 打开out_file.xls文件,创建工作簿实例对象
 75     sheet = rb.sheet_by_index(0)
 76     nrow11 = sheet.cell_value(10, 0) #修改第11行第一列,索引是10,0
 77     # 根据需要截取原单元格里面的内容与需要添加的内容进行拼接
 78     new_nrow11 = ‘[‘ + nrow11
 79     # 同理操作nrow12
 80     nrow12 = sheet.cell_value(11, 0)
 81     new_nrow12 = nrow12 + ‘]‘
 82
 83     wb = copy(rb)
 84     ws = wb.get_sheet(0)
 85     # 往单元格中写入拼接后的新字符串内容
 86     ws.write(10,0,new_nrow11)
 87     ws.write(11, 0, new_nrow12)
 88     modify_file = ‘new_chrmosome%s_%s.xls‘ % (chrnum,pos)
 89     wb.save(modify_file)
 90
 91 def main():
 92     hg19 = "hg19"
 93     chrnum = 17
 94     pos = 7676091
 95     start = pos - 500
 96     end = pos + 500
 97     position_DNA_list = []
 98     #url = "http://genome.ucsc.edu/cgi-bin/das/hg38/dna?segment=chr17:7676091,7676196"
 99     url = f"http://genome.ucsc.edu/cgi-bin/das/{hg19}/dna?segment=chr{chrnum}:{start},{end}"
100
101     print(url)
102     html = getHTMLText(url)
103     dnalist = fillDNAList(position_DNA_list,html)
104     out_file_dir = write_excell(dnalist,chrnum,pos)
105     modify_excell(out_file_dir,chrnum,pos)
106
107 main()

结果如下:

http://genome.ucsc.edu/cgi-bin/das/hg19/dna?segment=chr17:7675591,7676591
111111
get 222222222222222
match ok
BeautifulSoup tag属性 获取dna标签属性的字符串部分
final======> [‘SEQUENCE id="chr17" start="7675591" stop="7676591" version="1.00"‘, ‘DNA length="1001"‘, ‘CCCAAGAGCCTTCAGTATACACATCAATAAAAATAATTTTAATTATTCTGATAAAAGATAAACATGAAAAGTTATGGTATGCAAAGTTGAATGACAACAACTGATACTATTTGAAATAATTGACAGAATTATATTCCGTAACAATTTATAAGCAAAGCCAAAAAAACAATGATCCCTTTGTTGAATGCACAGAACAAATCCATCTTGTCCACGGCTACTGAGCATGCCTGTGATCTCCAGGGGTCACTCAGGTTTGACTCAAAGGATCCAACAGCCTGTAGACCCTGTGCTTGAAGGCATGAGGGTCACCTCTGAGTTCACACTCACTAGTGTCCCTCCTTTCTTCAGAAAGCTAGGAACTGGGAAGACAAGGGGAAAATCAATCAAGGCCTGAGGTATGGGGCTGTAGGCTGGGAGGAAACTAACATTATTGAGAAGCTACTGATGTGAATACATTTCAATTACTACTCACATTGGTTTTTTGTTTGTTTGTTTGTTTGTTTGTTTGTTTGTTTTTTAAGACGGAGTTTTGCTCTCGTTGCCCAGGCTGGAGTGCAATGGAATGATCTAAGGTCACCACAACCTCCACCTCCCGGTTCAAGCAATTCTCCTGCCTCAGCCTCCCAAGTAGCTGGGACTACAGGCGTGTGCCACCACACCCAGCTAAGTTTGTATTTTTTTAGTAGAGACGGTGTTTCACCATGTTGGTCAGGCTGGTCTCGAACTCCTGACCTCAAGTGATCCACCCACCTCGGCCTCCCAAAGTGCTGGGATTATAGGCATGAGCCACCACACCCAGCCTCACGTTGGTTTTTGAGATGGATTTTATTGCCATTTTGTACACAAAAAGGTCAAAACTCAGTGAGGTGAATTGACATGACAGTAAGTGAAAGAACTACTATCTGATTGGGGGTCTTCTGCCGCCTGCTCTGGGACTCTTTCTGCTATGACATGAAGGACATTGGCAACCCCAGTCCTTGCAGATTTCTTTCACTGTGTGC‘]
===== CCCAAGAGCCTTCAGTATACACATCAATAAAAATAATTTTAATTATTCTGATAAAAGATAAACATGAAAAGTTATGGTATGCAAAGTTGAATGACAACAACTGATACTATTTGAAATAATTGACAGAATTATATTCCGTAACAATTTATAAGCAAAGCCAAAAAAACAATGATCCCTTTGTTGAATGCACAGAACAAATCCATCTTGTCCACGGCTACTGAGCATGCCTGTGATCTCCAGGGGTCACTCAGGTTTGACTCAAAGGATCCAACAGCCTGTAGACCCTGTGCTTGAAGGCATGAGGGTCACCTCTGAGTTCACACTCACTAGTGTCCCTCCTTTCTTCAGAAAGCTAGGAACTGGGAAGACAAGGGGAAAATCAATCAAGGCCTGAGGTATGGGGCTGTAGGCTGGGAGGAAACTAACATTATTGAGAAGCTACTGATGTGAATACATTTCAATTACTACTCACATTGGTTTTTTGTTTGTTTGTTTGTTTGTTTGTTTGTTTGTTTTTTAAGACGGAGTTTTGCTCTCGTTGCCCAGGCTGGAGTGCAATGGAATGATCTAAGGTCACCACAACCTCCACCTCCCGGTTCAAGCAATTCTCCTGCCTCAGCCTCCCAAGTAGCTGGGACTACAGGCGTGTGCCACCACACCCAGCTAAGTTTGTATTTTTTTAGTAGAGACGGTGTTTCACCATGTTGGTCAGGCTGGTCTCGAACTCCTGACCTCAAGTGATCCACCCACCTCGGCCTCCCAAAGTGCTGGGATTATAGGCATGAGCCACCACACCCAGCCTCACGTTGGTTTTTGAGATGGATTTTATTGCCATTTTGTACACAAAAAGGTCAAAACTCAGTGAGGTGAATTGACATGACAGTAAGTGAAAGAACTACTATCTGATTGGGGGTCTTCTGCCGCCTGCTCTGGGACTCTTTCTGCTATGACATGAAGGACATTGGCAACCCCAGTCCTTGCAGATTTCTTTCACTGTGTGC <class ‘str‘>

  

原文地址:https://www.cnblogs.com/yellow-hgy/p/10206221.html

时间: 01-01

python 根据染色体起始终止点坐标来获取碱基序列的相关文章

Python开发实战教程(8)-向网页提交获取数据

来这里找志同道合的小伙伴!↑↑↑ Python应用现在如火如荼,应用范围很广.因其效率高开发迅速的优势,快速进入编程语言排行榜前几名.本系列文章致力于可以全面系统的介绍Python语言开发知识和相关知识总结.希望大家能够快速入门并学习Python这门语言. 本次课程是在掌握python基础之上进行的.基础没有学习的话建议先查看文章学习基础目录:Python开发实战系列教程-链接汇总,持续更新.进行学习. 最近几天感冒中,四肢乏力以及最近比较忙导致,更新较慢.还请见谅. 概述 很多时候我们需要给网

使用python UIAutomation从QQ2016(8.0)群界面获取所有群成员详细资料,

首先到https://github.com/yinkaisheng/Python-UIAutomation-for-Windows下载automation.py和AutomationClient.dll automation.py是我写的一个python封装微软UIAutomation API的一个module,使用非常简单运行automation.py -h查看帮助首先打开qq群聊天窗口,运行automation.py -a,然后3秒内移动鼠标到qq群上其中一个成员上面(下图右下角红框中),等

BaiduMap 鼠标绘制矩形选框四个顶角坐标的获取

雪影工作室版权全部.转载请注明[http://blog.csdn.net/lina791211] 1.博文产生原因 在使用百度Map开放API进行开发的时候,遇到了一个需求,非常easy的一个需求. →用户须要在地图上画一个矩形,依据矩形的边界值查询数据(主要在卫星数据的时空检索上使用) 没有想到的是,我翻遍了百度Map的百度地图JavaScript API,愣是没有找到相关的操作.在度娘上问了一圈小伙伴,没发现有这个需求的. 真的伤心 2.实现机制 Step1:综合考虑现有需求,针对须要选择空

Python PhatomJS 和Selenium动态加载页面 获取图片内容

随笔中的代码拷贝自 http://www.cnblogs.com/Albert-Lee/p/6275146.html 感谢阿里波特,通过学习自己做了一些注释,作为总结和记录. 1 from selenium import webdriver 2 import requests 3 from bs4 import BeautifulSoup 4 import os 5 import time 6 #定义函数时,尽量写上默认参数,字符='',数字=0,特殊对象也要定义默认值,这样就可以简单的通过.来

python实现QQ机器人(自己主动登录,获取群消息,发送群消息)

一次偶然的机会我看见了一个群里的一个QQ号总是依据你所发的消息自己主动回复,当时非常感觉到奇妙.我知道能够模拟登录站点,没想到居然也能模拟登录QQ,首先自己想到的就是怎样实现模拟登录PC端的QQ, 開始研究了下,发现QQ所发送的包都非常难理解. 于是就转到了网页版的QQ,由于在网页里能够捕获全部的请求从而更好的实现模拟功能! 首先第一步就是打开网页版的qq.打开浏览器的开发人员模式 这里能够监控全部的请求! 打开登录界面的的时候 会捕捉到一个GET请求 https://ssl.ptlogin2.

python库使用整理

1. 环境搭建 l  Python安装包:www.python.org l  Microsoft Visual C++ Compiler for Python l  pip(get-pip.py):pip.pypa.io/en/latest/installing.html n  pip install + 安装包          --安装包(.whl,.tar.gz,.zip) n  pip uninstall + 安装包        --卸载包 n  pip show --files +

Python Day17(jQuery)

一.概述 1.简介 jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架).jQuery设计的宗旨是"write Less,Do More",即倡导写更少的代码,做更多的事情.它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作.事件处理.动画设计和Ajax交互. jQuery的核心特性可以总结为:具有独特的链式语法和短小清晰的多功能接口

Python默认模块 os和shutil 实用函数

os.sep 可以取代操作系统特定的路径分隔符.windows下为 '\\' os.name 字符串指示你正在使用的平台.比如对于Windows,它是'nt',而对于Linux/Unix用户,它是 'posix' os.getcwd() 函数得到当前工作目录,即当前Python脚本工作的目录路径 os.getenv() 获取一个环境变量,如果没有返回none os.putenv(key, value) 设置一个环境变量值 os.listdir(path) 返回指定目录下的所有文件和目录名 os.

python标准模块(下)

Python 系统标准模块(shutil.logging.shelve.configparser.subprocess.xml.yaml.自定义模块) 目录: shutil logging模块 shelve configparser subprocess xml处理 yaml处理 自定义模块 一,系统标准模块: 1.shutil:是一种高层次的文件操作工具,类似于高级API,而且主要强大之处在于其对文件的复制与删除操作更是比较支持好,是高级的文件.文件夹.压缩包处理模块,而且是系统的标准自带模块

9.python之异常处理

一.python中的错误与异常. 先来说说什么是错误. 在python中错误分为两种 语法错误这种语法错误根本过不了python解释器下面这几种就属于语法错误. 例1: if 输出 File "/Users/macbook/PycharmProjects/untitled1/作业2/test2.py", line 1 if ^ SyntaxError: invalid syntax 例2: def test: pass 例3: class Foo pass 以上这些都是语法错误 2 .