2017-03-17 277 views
2

我正在使用pymol的迭代獲取所有殘基編號,然後使用它們檢索殘基名稱。我認爲這不是最好的辦法。我試圖尋找一種biopython的方式無濟於事。我希望你的意見和建議。在Biopython PDB模塊中獲取殘基編號和殘基名稱

一個側面的問題,有時甚至是鏈[i] .resname給我一個KeyError:('','number','')帶有一定的殘基,這使我使用try和except塊。任何替代品?

from Bio import * 
from Bio.PDB.PDBParser import PDBParser 
from Bio.PDB.Polypeptide import PPBuilder 
structure = PDBParser().get_structure('5bmy', '5bmy.pdb')  
model = structure[0] 
chain = model['A'] 

import __main__ 
__main__.pymol_argv = ['pymol','-qc'] 
import pymol 
from pymol import cmd, stored 
pymol.finish_launching() 
cmd.load('5bmy.pdb') # use the name of your pdb file 
stored.residues = [] 
cmd.iterate('name ca', 'stored.residues.append(resi)') 
numbers = [ int(x) for x in stored.residues ] 
for i in numbers: 
    print (chain[i].resname) 
+0

只是一個建議,你可能也想發佈這個biostars,他們有這種事情更積極的社區。 – nbryans

回答

0

從看API(在通過命令dir(chain)什麼可供鏈),我可以看到,有一個方法get_residues()。看看其中的一個殘留物,我可以看到有一個功能get_resname()。使用這些,對你問題的一個解決方案可能是:

from Bio import * 
from Bio.PDB.PDBParser import PDBParser 
from Bio.PDB.Polypeptide import PPBuilder 
structure = PDBParser().get_structure('5bmy', '5bmy.pdb')  


model = structure[0] 
chain = model['A'] 

for i in chain.get_residues(): 
    print(i.get_resnames()) 

這給不需要pymol的解決方案。