以下代码为个人原创,python实现,是处理PDB文件的部分常用代码,仅供参考!

1.下载PDB文件

下面是一个下载PDB文件的函数,传入的参数是一个写有pdb名字的namefile文件,函数的核心部分是三个系统命令,先通过wget下载,然后解压,最后替换名字。

def downloadpdb(namefile):inputfile = open(namefile, 'r')for eachline in inputfile:pdbname = eachline.lower().strip()os.system("wget http://ftp.wwpdb.org/pub/pdb/data/structures/all/pdb/pdb" + pdbname + ".ent.gz")os.system("gzip -d pdb" + pdbname + '.ent.gz')os.system("mv pdb" + pdbname + ".ent " + pdbname.upper() + '.pdb')

测试用例

os.chdir('/ifs/home/liudiwei/datasets/RPdatas')
downloadpdb('protein.name')

2.PDB转DSSP

将下载的PDB文件转成DSSP文件

# 处理一行dssp数据
def formatdsspline(dsspline):eachline  = dssplinecol = '\t' + eachline[0:5]col += '\t' + eachline[5:10]col += '\t' + eachline[10:12]col += '\t' + eachline[12:15]col += '\t' + eachline[15:25]col += '\t' + eachline[25:39]col += '\t' + eachline[29:34]col += '\t' + eachline[34:38]col += '\t' + eachline[38:50]col += '\t' + eachline[50:61]col += '\t' + eachline[61:72]col += '\t' + eachline[72:83]col += '\t' + eachline[83:92]col += '\t' + eachline[92:97]col += '\t' + eachline[97:103]col += '\t' + eachline[103:109]col += '\t' + eachline[109:115]col += '\t' + eachline[115:122]col += '\t' + eachline[122:129]col += '\t' + eachline[129:136]return col

PDB转DSSP格式,需要DSSP软件

参数:

  • pdbdir: pdb文件目录

  • dsspdir: 生成的dssp文件目录(需创建)

def pdbToDSSP(pdbnamefile,pdbdir, dsspdir):    pdbfiles = os.listdir(pdbdir)#对于每个pdb文件,生成对应的dssp文件,并保存在dssp目录下for pdb_file in pdbfiles:pdb_name = pdb_file.split('.')[0].upper()command = 'DSSPCMBI.EXE -x ' + pdbdir +'/'+ pdb_file + '  '+ dsspdir +"/"+ pdb_name +'.dssp'os.system(command) dsspfiles = os.listdir(dsspdir)if os.path.exists(dsspdir + "/DSSP"):      #判断DSSP文件是否存在,存在则删除dsspfiles.remove("DSSP")output=open(dsspdir + '/DSSP','w')#循环读取dssp文件,将其合并成一个整的DSSPwith open(pdbnamefile, 'r') as namefile:for eachline in namefile:pdb_name = eachline.strip() dssp_file = pdb_name + '.dssp'#for dssp_file in dsspfiles:#pdb_name = dssp_file.split('.')[0]with open(dsspdir + '/' + dssp_file,"r") as f:if not os.path.isdir(dsspdir + '/format'):os.mkdir(dsspdir + '/format')with open(dsspdir + '/format/' + pdb_name + '.dssp.format','w') as singleOut:count = 0; preRes=[]sets = set('');content=''   for eachline in f.readlines():list1=[];oneline=[]count+=1list1.append(pdb_name)                             if count >= 29:eachline = formatdsspline(eachline)oneline = eachline.split('\t')if oneline[3].strip():preRes = oneline[3].strip()                        list1.append(eachline)content += "".join(list1)+'\n'                            if '!' == oneline[4].strip():continueif '!*' in eachline or not oneline[3].strip():if preRes in sets and len(sets):content=''preRes=[]continuesets.add(preRes)output.write(content)singleOut.write(content)content=''if preRes and preRes not in sets:output.write(content)singleOut.write(content)output.close()

测试

#test
pdbdir = 'z:/datasets/protein/pdb'
dsspdir = 'Z:/datasets/protein/DSSPdir'
proname = 'Z:/datasets/protein/protein.name'
pdbToDSSP(proname,pdbdir, dsspdir)

3.DSSP抽取序列

从一个整合的DSSP文件中抽取序列文件

从格式化后的dssp文件获取序列信息

参数:dsspfile为格式过的DSSP文件,seqfile为输出的序列文件,同时输出序列文件

def getSeqFromDSSP(dsspfile, seqfile, minLen):with open(dsspfile, 'r') as inputfile:if not seqfile.strip():seqfile = 'protein'+minLen + '.dssp.seq'outchain = open('protein40.chain.all', 'w')with open(seqfile, 'w') as outputfile:residue=[];Ntype=[]preType=[];preRes=[]firstline=[];secondline=[];content=''for eachline in inputfile:oneline = eachline.split('\t')residue = oneline[0]if not residue.strip(): continueNtype = oneline[3].strip()if not Ntype.strip():continueif preRes!=residue:content = ''.join(firstline)+'\n' + ''.join(secondline) +'\n'if len(secondline) >=minLen and not 'X' in secondline:outchain.write(''.join(firstline) + '\n')outputfile.write(content)firstline=[]firstline.append('>' + residue + ':' + Ntype)secondline=[];secondline.append(oneline[4].strip())preRes = residue;preType = Ntypecontinueif Ntype != preType:content = ''.join(firstline)+'\n' + ''.join(secondline) +'\n'if len(secondline) >=minLen and  not 'X' in secondline:outchain.write(''.join(firstline) + '\n')outputfile.write(content)firstline=[]firstline.append('>' + residue + ':' + Ntype)secondline=[];secondline.append(oneline[4].strip())preRes = residue;preType = Ntypeelse: #如果Ntype不为空,且等于preTypesecondline.append(oneline[4].strip())content = ''.join(firstline)+'\n' + ''.join(secondline) +'\n'if len(secondline) >=minLen and not 'X' in secondline:  #选择长度大于40outchain.write(''.join(firstline) + '\n')outputfile.write(content)outchain.close()

测试:

os.chdir(r"E:\3-CSU\Academic\_Oriented\analysis\experiment\Datasets\ptest.dssp")
pdbfile = 'DSSP'
outfile = 'protein.seq'
getSeqFromDSSP(pdbfile,outfile)

4.对序列做blast聚类

设置相应的参数,在服务器上跑blast,代码如下:

ifs/share/lib/cd-hit-v4.5.4/cd-hit -i /ifs/home/liudiwei/datasets/protein40.seq -o /ifs/home/liudiwei/experiment/cdhit/fasta.40 -c 0.4 -n 2 -M 2000

5.生成聚类后的DSSP,得到protein.name、protein.seq、protein.chain三个文件

从原来的DSSP文件中,根据聚类后的链名抽取新的DSSP文件

 # extract dssp from old dssp file
def extractDSSP(dsspfile, chainname, outfile):with open(outfile, 'w') as outdssp:with open(dsspfile, 'r') as inputdssp:for eachline in inputdssp:oneline = eachline.split('\t')#preNum = oneline[2].strip()     with open(chainname,'r') as chainfile:       for eachchain in chainfile:protein_ame = eachchain[1:5]chain_id = eachchain[6:7]if oneline[0].strip() == protein_ame and oneline[3].strip() == chain_id:outdssp.write(eachline)break

测试实例:

dsspfile = '/ifs/home/liudiwei/datasets/832.protein/DSSPdir1/DSSP'
chainname = '/ifs/home/liudiwei/experiment/step1/832p.cluster/cdhit/protein.chain'
outfile = '/ifs/home/liudiwei/experiment/step1/832p.cluster/cdhit/DSSP'
extractDSSP(dsspfile, chainname, outfile )

本栏目持续更新中,欢迎关注:Dream_Angel_Z博客

数据预处理-PDB文件处理代码相关推荐

  1. 转载:Asp.net 2.0 GridView数据导出Excel文件(示例代码下载)

    作者: Maco   发布日期: 2006-8-28 11:09:28 (一) . 运行示例图 1. 待导出数据的GridView图: 2. 生成的Excel文件 (二). 代码 1. 前台页面 Gr ...

  2. python必备基础代码-【Python基础系列】常见的数据预处理方法(附代码)

    本文简单介绍python中一些常见的数据预处理,包括数据加载.缺失值处理.异常值处理.描述性变量转换为数值型.训练集测试集划分.数据规范化. 1. 加载数据 1.1 数据读取 数据格式有很多,介绍常见 ...

  3. 求图纸形心的数据预处理与形心计算代码:输入多个矩形的坐标和长度宽度,计算它们的形心坐标

    问题背景: 求一个平面图的形心,其中平面图由多个矩形组成.其中图来自现实世界,无计算机输入. 数据预处理: 需要用到proceson,网址:https://www.processon.com 首先将区 ...

  4. python数据预处理的代码_【Python基础系列】常见的数据预处理方法(附代码)

    ↑↑↑点击上方蓝字,回复资料,嘿嘿,10个G的惊喜 本文简单介绍python中一些常见的数据预处理,包括数据加载.缺失值处理.异常值处理.描述性变量转换为数值型.训练集测试集划分.数据规范化. 1. ...

  5. python代码实现中心化_数据预处理——标准化(附python代码)

    数据标准化,是数据清洗的重要环节之一.主要目的是消除"量纲"和"不同规模"的影响,使其所放到相同的数据区间和范围,以减少规模.特征.分布差异等对数据模型的影响. ...

  6. VS2010下使用dmp文件和pdb文件定位程序异常代码行号的注意事项

    2018-01-12 创建人:Ruo_Xiao 2018-01-15 修改人:Ruo_Xiao 添加为dump.exe和pdb版本保持一致的原因. 一.minidump文件 崩溃转储是创建一个应用程序 ...

  7. 应用SVM预测澳大利亚降雨(含数据预处理与调参)

    0 声明 本文主要内容来自视频'[2020机器学习全集]菜菜的sklearn完整版,价值4999元的最全机器学习sklearn全集,赶紧收藏_哔哩哔哩_bilibili',课件来自"http ...

  8. Tensorflow数据预处理之tf.data.TFRecordDataset---TFRecords详解\TFRecords图像预处理

    目录 1.概述 2.预处理数据 2.1.常量定义 2.2.导入库 2.3.从train.txt文件中读取图片-标签对 2.4.预处理图片并保存 2.5.调用main函数 3.读取预处理后的数据 3.1 ...

  9. linux c之把最简单的字符串数据追加写入文件

    1 问题 把最简单的字符串数据追加写入文件 2 代码实现 #include <stdio.h> #include <string.h>void write_data_to_fi ...

最新文章

  1. 一款好用 mongodb 可视化工具
  2. 3 实现模糊遮罩_有了这3个神器,你就不用为抠图发愁了!
  3. Vue 生命周期LIFECYCLE是8个吗?
  4. 华为 FusionData 发布,大数据痛点消失不见!
  5. R语言ggplot2包之画折线图
  6. BOM组件物料重复检查
  7. ZeroC IceGrid介绍及demo构建(使用IceBox)
  8. 4.4使用@Enable*注释去切换配置
  9. Android深度探索与HAL驱动开发(卷1)-- 第七章随笔
  10. java session超时判断_详解SpringBoot中Session超时原理说明
  11. 微波雷达感应模块技术,实时智能检测人体存在,静止微小动静感知
  12. ITF跆拳道的24个特尔
  13. 怎么购买企业邮箱,企业邮箱有什么好处?
  14. Android实现九宫格图片控件
  15. DTAS 3D在车身公差分析中的应用案例
  16. Goland 1.15运行报错:该版本的 %1 与你运行的 Windows 版本不兼容
  17. EXCEL装逼指南之动态进度条(项目经理必备技能)
  18. 5e服务器显示fps被锁定,csgo强制被锁60帧 被锁60fps解决方法
  19. 【Office】三件套之Word套路
  20. Oracle——单列函数,多表连接

热门文章

  1. 边缘计算框架工程与实践-阅读笔记
  2. 2020 年以来开源软件商业化公司融资情况
  3. hive知识简单全面详解
  4. 中国传统色彩研究相关书籍整理
  5. 123457123456#0#-----com.ppGame.huaHua65--前拼后广--儿童填色-pp
  6. PMP课堂模拟题目及解析(第15期)
  7. MySQL基础入门【3】
  8. 健康医疗数据安全技术指南
  9. android dp转px的公式_dp和px换算公式
  10. E - Arithmetic Number(构造)