用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

相关文章

HTML5实现的移动端购物车自动结算功能示例代码

《HTML5实现的移动端购物车自动结算功能示例代码》本文介绍HTML5实现移动端购物车自动结算,通过WebStorage、事件监听、DOM操作等技术,确保实时更新与数据同步,优化性能及无障碍性,提升用... 目录1. 移动端购物车自动结算概述2. 数据存储与状态保存机制2.1 浏览器端的数据存储方式2.1.

基于 HTML5 Canvas 实现图片旋转与下载功能(完整代码展示)

《基于HTML5Canvas实现图片旋转与下载功能(完整代码展示)》本文将深入剖析一段基于HTML5Canvas的代码,该代码实现了图片的旋转(90度和180度)以及旋转后图片的下载... 目录一、引言二、html 结构分析三、css 样式分析四、JavaScript 功能实现一、引言在 Web 开发中,

springboot下载接口限速功能实现

《springboot下载接口限速功能实现》通过Redis统计并发数动态调整每个用户带宽,核心逻辑为每秒读取并发送限定数据量,防止单用户占用过多资源,确保整体下载均衡且高效,本文给大家介绍spring... 目录 一、整体目标 二、涉及的主要类/方法✅ 三、核心流程图解(简化) 四、关键代码详解1️⃣ 设置

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

Python pip下载包及所有依赖到指定文件夹的步骤说明

《Pythonpip下载包及所有依赖到指定文件夹的步骤说明》为了方便开发和部署,我们常常需要将Python项目所依赖的第三方包导出到本地文件夹中,:本文主要介绍Pythonpip下载包及所有依... 目录步骤说明命令格式示例参数说明离线安装方法注意事项总结要使用pip下载包及其所有依赖到指定文件夹,请按照以

Maven 配置中的 <mirror>绕过 HTTP 阻断机制的方法

《Maven配置中的<mirror>绕过HTTP阻断机制的方法》:本文主要介绍Maven配置中的<mirror>绕过HTTP阻断机制的方法,本文给大家分享问题原因及解决方案,感兴趣的朋友一... 目录一、问题场景:升级 Maven 后构建失败二、解决方案:通过 <mirror> 配置覆盖默认行为1. 配置示

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

Linux中修改Apache HTTP Server(httpd)默认端口的完整指南

《Linux中修改ApacheHTTPServer(httpd)默认端口的完整指南》ApacheHTTPServer(简称httpd)是Linux系统中最常用的Web服务器之一,本文将详细介绍如何... 目录一、修改 httpd 默认端口的步骤1. 查找 httpd 配置文件路径2. 编辑配置文件3. 保存

Python使用pynput模拟实现键盘自动输入工具

《Python使用pynput模拟实现键盘自动输入工具》在日常办公和软件开发中,我们经常需要处理大量重复的文本输入工作,所以本文就来和大家介绍一款使用Python的PyQt5库结合pynput键盘控制... 目录概述:当自动化遇上可视化功能全景图核心功能矩阵技术栈深度效果展示使用教程四步操作指南核心代码解析