拆分PDB结构,使每条链成为一个单独的pdb结构

说明:parse_pdb_split_chain()函数用于将PDB中包含的链拆开,包括对应的alpha-helixbeta-sheetlinks信息 (不足之处在于由于暂时没有遇到含有TURN的PDB结构,所以暂时没有获取对应的turn信息)。

import gzip
import re

def parse_pdb_split_chain(pdbgzFile,outpath):
    with gzip.open(pdbgzFile,'rb') as pdbF:
        pdbcontent = pdbF.read()
        pdbcontent = pdbcontent.decode()

        pattern = re.compile('ATOM\s+\d+\s*\w+\s*[A-Z]{3,4}\s*(\w)\s*.+\n',re.MULTILINE)
        match = list(set(list(pattern.findall(pdbcontent))))

        for chain in match:
            patt_helix = re.compile('(HELIX\s+\w+\s*\w+\s*[A-Z]{3,4}\s*'+chain+'\s*.+)\n',re.MULTILINE)
            patt_sheet = re.compile('(SHEET\s+\w+\s*\w+\s*\w+\s*[A-Z]{3,4}\s*'+chain+'\s*.+)\n',re.MULTILINE)
            patt_links = re.compile('(LINK\s+\w+\s*\w+\s*'+chain+'\s*.+)\n',re.MULTILINE)
            patt_cha = re.compile('(ATOM\s+\d+\s*\w+\s*[A-Z]{3,4}\s*'+chain+'\s*.+)\n',re.MULTILINE)
            
            match_helix = patt_helix.findall(pdbcontent)
            match_sheet = patt_sheet.findall(pdbcontent)
            match_links = patt_links.findall(pdbcontent)
            match_cha = patt_cha.findall(pdbcontent)
            
            outfile = outpath+pdbgzFile.split('/')[-1].split('.')[0][3:].upper()+'_'+chain+'.pdb'
            outF = open(outfile,'w')
            for i in range(len(match_helix)):  ## alpha-helix
                outF.write(match_helix[i]+'\n') 
            for j in range(len(match_sheet)):  ## beta-sheet
                outF.write(match_sheet[j]+'\n')
            for k in range(len(match_links)):  ## Links
                outF.write(match_links[k]+'\n')
            for l in range(len(match_cha)):  ## ATOM
                outF.write(match_cha[l]+'\n')
            outF.write('TER\n')
            outF.write('END\n')
            outF.close()

pdbgzFile:指的是PDB的压缩文件。

outpath: 指的是结果的输出目录。

输出文件的命名方式是:PDBID_chainID.pdb

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
03-31 1056

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值