用http协议在rcsb.org自动下载pdb文件

2023-10-09 12:50

本文主要是介绍用http协议在rcsb.org自动下载pdb文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

请参考rcsb官方提供文档接口
由于python提供接口简单,所以选择了它

程序流程

1.从thefile.txt 文件中读取蛋白序列
2.然后从rcsb 查询,获取查询XML数据
3.解析XML文件
4.下载pdb文件

python代码

可以用python name.py 直接运行.

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import urllib
import urllib2
import xml.saxglobal_url = "https://files.rcsb.org/download/"class PdbHandler( xml.sax.ContentHandler ):def __init__(self):self.CurrentData = ""self.BlastOutput_program = ""self.BlastOutput_version = ""self.BlastOutput_db = ""self.BlastOutput_query_def = ""self.BlastOutput_query_len = ""self.blastOutput_iterations = ""self.blastOutput_query_len = 0self.BlastOutput_param = ""self.Parameters_matrix = ""self.Parameters_expect = ""self.Hit_def = ""       # 元素开始事件处理def startElement(self, tag, attributes):self.CurrentData = tagif tag == "BlastOutput":print "-------start---BlastOutput--"# 元素结束事件处理def endElement(self, tag):if self.CurrentData == "BlastOutput_program":print "BlastOutput_program:", self.BlastOutput_programelif self.CurrentData == "Hit_def":print "file name :", self.Hit_def[0:4] download_pdb(self.Hit_def[0:4])# 内容事件处理def characters(self, content):if self.CurrentData == "BlastOutput_program":self.BlastOutput_program = contentelif self.CurrentData == "BlastOutput_version":self.BlastOutput_version = contentelif self.CurrentData == "BlastOutput_db":self.BlastOutput_db = contentelif self.CurrentData == "BlastOutput_query-ID":self.BlastOutput_query_ID = contentelif self.CurrentData == "BlastOutput_query-def":self.BlastOutput_query_def = contentelif self.CurrentData == "BlastOutput_query-len":self.BlastOutput_query_len = contentelif self.CurrentData == "Parameters_matrix":self.Parameters_matrix = contentelif self.CurrentData == "Hit_def":self.Hit_def = contentdef download_pdb(file_name):try:f = urllib2.urlopen(global_url + file_name + ".pdb") data = f.read()with open("pdb/" + file_name + ".pdb", "wb") as code:     code.write(data)code.close()except Exception as e:print global_url + file_name + ".pdb"def setup_connect():test_data = {'sequence':'TDMLTLTRYVMEKGRQAKGTGELTQLLNSMLTAIKAISSAVRKAGLAHLYGIAGSVNVDQ', 'eCutOff':'10.0', 'matrix':'BLOSUM62', 'outputFormat':'XML'}#test_data['sequence'] = seqtest_data_urlencode = urllib.urlencode(test_data)requrl = "https://www.rcsb.org/pdb/rest/postBLAST"req = urllib2.Request(url = requrl,data =test_data_urlencode)print reqres_data = urllib2.urlopen(req)print res_datares = res_data.read()return resdef save_to_file(file_name, contents):try:fh = open(file_name, 'w')fh.write(contents)fh.close()      except Exception as e:print("save to file error!")def read_file():'''file_object = open('thefile.txt')try:#:  for line in file_object:#  process linefinally:file_object.close()'''if ( __name__ == "__main__"):print '__main__'# 创建一个 XMLReaderparser = xml.sax.make_parser()# turn off namepsacesparser.setFeature(xml.sax.handler.feature_namespaces, 0)# 重写 ContextHandlerHandler = PdbHandler()parser.setContentHandler( Handler )parser.parse("output1.xml")'''xml_data = setup_connect()save_to_file('output1.xml', xml_data)file_object = open('thefile.txt')try:while 1:line = file_object.readline()if not line:breakline = line.split()print( line )print( line[1] )xml_data = setup_connect(line[1])
#   save_to_file('output.txt', data)parser = xml.sax.parseString(xml_data, PdbHandler())#parser.setFeature(xml.sax.handler.feature_namespaces, 0)#Handler = #parser.setContentHandler( Handler )parser.parse()finally:file_object.close()
'''

下面是thefile.txt文件格式,字段之间用空格分隔.

TDMLTLTRYVMEKGRQAKGTGELTQLLNSMLTAIKAISSAVRKAGLAHLYGIAGSVNVDQ  1

下面是我的运行结果,下载了很多PDB文件.
这里写图片描述

这篇关于用http协议在rcsb.org自动下载pdb文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/172969

相关文章

Nginx部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

使用Python的requests库来发送HTTP请求的操作指南

《使用Python的requests库来发送HTTP请求的操作指南》使用Python的requests库发送HTTP请求是非常简单和直观的,requests库提供了丰富的API,可以发送各种类型的HT... 目录前言1. 安装 requests 库2. 发送 GET 请求3. 发送 POST 请求4. 发送

基于Redis自动过期的流处理暂停机制

《基于Redis自动过期的流处理暂停机制》基于Redis自动过期的流处理暂停机制是一种高效、可靠且易于实现的解决方案,防止延时过大的数据影响实时处理自动恢复处理,以避免积压的数据影响实时性,下面就来详... 目录核心思路代码实现1. 初始化Redis连接和键前缀2. 接收数据时检查暂停状态3. 检测到延时过

Python多线程实现大文件快速下载的代码实现

《Python多线程实现大文件快速下载的代码实现》在互联网时代,文件下载是日常操作之一,尤其是大文件,然而,网络条件不稳定或带宽有限时,下载速度会变得很慢,本文将介绍如何使用Python实现多线程下载... 目录引言一、多线程下载原理二、python实现多线程下载代码说明:三、实战案例四、注意事项五、总结引

Java报错:org.springframework.beans.factory.BeanCreationException的五种解决方法

《Java报错:org.springframework.beans.factory.BeanCreationException的五种解决方法》本文解析Spring框架中BeanCreationExce... 目录引言一、问题描述1.1 报错示例假设我们有一个简单的Java类,代表一个用户信息的实体类:然后,

Go语言使用net/http构建一个RESTful API的示例代码

《Go语言使用net/http构建一个RESTfulAPI的示例代码》Go的标准库net/http提供了构建Web服务所需的强大功能,虽然众多第三方框架(如Gin、Echo)已经封装了很多功能,但... 目录引言一、什么是 RESTful API?二、实战目标:用户信息管理 API三、代码实现1. 用户数据