任何人都可以帮助我理解并解决这个错误吗?

时间:2014-10-04 12:55:11

标签: python bioinformatics biopython protein-database

我想绘制遍在蛋白的alpha-cabonnitrogen键距的分布。所以我下载了1UBQ.pdb from RCSB website。现在使用biopython,我试图找到所有alpha-cabon(CA)nitrogen(N)之间的距离。

我尝试过如下代码:

import sys
#from Bio.PDB import *
from Bio.PDB.PDBParser import PDBParser 
from numpy import loadtxt

pdb1 ='/home/devanandt/Documents/VMD/1UBQ.pdb'
sys.stdout = open('file_ubq', 'w')
parser=PDBParser(PERMISSIVE=1)

#file=open('1UBQ.pdb','r')
#header_dict=parse_pdb_header(file)
#file.close()
i=1
structure = parser.get_structure('1UBQ',pdb1)
for model in structure:
    for chain in model:
        for residue in chain:
            for atom in residue:
                model = structure[0] 
                chain = model['A'] 
                residue_1 = chain[i] 
                atom_1 = residue_1['N'] 
                atom_2 = residue_1['CA'] 
                distance = atom_1-atom_2 
                #print atom.get_vector(),atom.name,distance
                print distance
                i=i+1

#lines = loadtxt("file_ubq")

我得到了文件' file_ubq'如下所示:

1.47369
1.4966
1.47547
1.51187
1.44885
1.50423
1.47052
1.48006
1.50265
.
.
.
.
1.48417
1.47194
1.45661
1.47023

但除此之外,我得到的错误如下:

    return self.child_dict[id]
KeyError: (' ', 77, ' ')

----------------------------------------------
Program exited successfully with errcode (1)
Press the Enter key to close this terminal ... 
EXECUTING:
/home/devanandt/Documents/PYTHON/ubq/src/ubq_dist_pdf.py 
----------------------------------------------
Traceback (most recent call last):
  File "/home/devanandt/Documents/PYTHON/ubq/src/ubq_dist_pdf.py", line 38, in <module>
    residue_1 = chain[i] 
  File "/usr/lib/pymodules/python2.7/Bio/PDB/Chain.py", line 67, in __getitem__
    return Entity.__getitem__(self, id)
  File "/usr/lib/pymodules/python2.7/Bio/PDB/Entity.py", line 38, in __getitem__
    return self.child_dict[id]
KeyError: (' ', 77, ' ')

----------------------------------------------
Program exited successfully with errcode (1)
Press the Enter key to close this terminal ... 

EXECUTING:
/home/devanandt/Documents/PYTHON/ubq/src/ubq_dist_pdf.py 
----------------------------------------------
Traceback (most recent call last):
  File "/home/devanandt/Documents/PYTHON/ubq/src/ubq_dist_pdf.py", line 38, in <module>
    residue_1 = chain[i] 
  File "/usr/lib/pymodules/python2.7/Bio/PDB/Chain.py", line 67, in __getitem__
    return Entity.__getitem__(self, id)
  File "/usr/lib/pymodules/python2.7/Bio/PDB/Entity.py", line 38, in __getitem__
    return self.child_dict[id]
KeyError: (' ', 77, ' ')

----------------------------------------------
Program exited successfully with errcode (1)
Press the Enter key to close this terminal ... 
^CEXECUTING:
/home/devanandt/Documents/PYTHON/ubq/src/ubq_dist_pdf.py 
----------------------------------------------
Traceback (most recent call last):
  File "/home/devanandt/Documents/PYTHON/ubq/src/ubq_dist_pdf.py", line 38, in <module>
    residue_1 = chain[i] 
  File "/usr/lib/pymodules/python2.7/Bio/PDB/Chain.py", line 67, in __getitem__
    return Entity.__getitem__(self, id)
  File "/usr/lib/pymodules/python2.7/Bio/PDB/Entity.py", line 38, in __getitem__
    return self.child_dict[id]
KeyError: (' ', 77, ' ')

----------------------------------------------
Program exited successfully with errcode (1)
Press the Enter key to close this terminal ... 
EXECUTING:
/home/devanandt/Documents/PYTHON/ubq/src/ubq_dist_pdf.py 
----------------------------------------------
Traceback (most recent call last):
  File "/home/devanandt/Documents/PYTHON/ubq/src/ubq_dist_pdf.py", line 38, in <module>
    residue_1 = chain[i] 
  File "/usr/lib/pymodules/python2.7/Bio/PDB/Chain.py", line 67, in __getitem__
    return Entity.__getitem__(self, id)
  File "/usr/lib/pymodules/python2.7/Bio/PDB/Entity.py", line 38, in __getitem__
    return self.child_dict[id]
KeyError: (' ', 77, ' ')

----------------------------------------------
Program exited successfully with errcode (1)
Press the Enter key to close this terminal ... 

EXECUTING:
/home/devanandt/Documents/PYTHON/ubq/src/ubq_dist_pdf.py 
----------------------------------------------
Traceback (most recent call last):
  File "/home/devanandt/Documents/PYTHON/ubq/src/ubq_dist_pdf.py", line 38, in <module>
    residue_1 = chain[i] 
  File "/usr/lib/pymodules/python2.7/Bio/PDB/Chain.py", line 67, in __getitem__
    return Entity.__getitem__(self, id)
  File "/usr/lib/pymodules/python2.7/Bio/PDB/Entity.py", line 38, in __getitem__
    return self.child_dict[id]
KeyError: (' ', 77, ' ')

----------------------------------------------
Program exited successfully with errcode (1)
Press the Enter key to close this terminal ... 

EXECUTING:
/home/devanandt/Documents/PYTHON/ubq/src/ubq_dist_pdf.py 
----------------------------------------------
Traceback (most recent call last):
  File "/home/devanandt/Documents/PYTHON/ubq/src/ubq_dist_pdf.py", line 38, in <module>
    residue_1 = chain[i] 
  File "/usr/lib/pymodules/python2.7/Bio/PDB/Chain.py", line 67, in __getitem__
    return Entity.__getitem__(self, id)
  File "/usr/lib/pymodules/python2.7/Bio/PDB/Entity.py", line 38, in __getitem__
    return self.child_dict[id]
KeyError: (' ', 77, ' ')

----------------------------------------------
Program exited successfully with errcode (1)
Press the Enter key to close this terminal ... 

任何人都可以帮助我理解并解决这个错误吗?

3 个答案:

答案 0 :(得分:3)

您的代码存在一些问题。

  1. 您正在使用文件句柄重载sys.stdout,以便您可以写入该文件。你可以这样做:
  2. f_handle = open('random.pdb', 'w')
    print >>f_handle, "This will be written to the file, followed by a newline character"
    
    1. 您可以更好地访问Structure对象和相应的子项(Chain,Residue等),阅读常见问题解答以更好地了解库。您可能达到链的极限(76个残基)并尝试寻找第77个残基,因为您使用计数器来访问残基。 Biopython在Structure,Chain等对象中实现了迭代器,因此您只需对对象中的x表示&#39;并且过了孩子们。要打印每条链中N和Ca原子之间的距离,请执行以下操作:
    2. parser = PDBParser()
      structure = parser.get_structure('randomPDB', 'randomPDB.pdb')
      for model in structure:
          for chain in model:
              for residue in chain:
                  if residue.id[1] == ' ': # filters heteroatoms
                      resid = residue.id[0]
                      n_ca_dist = residue['N'] - residue['CA']
                      print >>f_handle, "Distance N-Ca bond of residue {0}: {1}".format(resid, n_ca_dist)
      

答案 1 :(得分:1)

好的,此代码修复了错误:

import sys
#from Bio.PDB import *
from Bio.PDB.PDBParser import PDBParser 
from numpy import loadtxt

pdb1 ='1UBQ.pdb'
sys.stdout = open('file_ubq', 'w')
parser=PDBParser(PERMISSIVE=1)

#file=open('1UBQ.pdb','r')
#header_dict=parse_pdb_header(file)
#file.close()
i=1
structure = parser.get_structure('1UBQ',pdb1)
for model in structure:
    for chain in model:
        for residue in chain:
            i = 1
            for atom in residue:
                model = structure[0] 
                chain = model['A'] 
                residue_1 = chain[i] 
                atom_1 = residue_1['N'] 
                atom_2 = residue_1['CA'] 
                distance = atom_1-atom_2 
                #print atom.get_vector(),atom.name,distance
                print distance
                i=i+1

#lines = loadtxt("file_ubq")

但是,它似乎包含大量重复结果,并且可能无法覆盖整个链。此代码不应包含重复项:

import sys
from Bio.PDB.PDBParser import PDBParser 
from numpy import loadtxt

pdb1 ='1UBQ.pdb'
sys.stdout = open('file_ubq', 'w')
parser=PDBParser(PERMISSIVE=1)

structure = parser.get_structure('1UBQ',pdb1)
for model in structure:
    for chain in model:
        for residue in chain:
            try:
                atom_1 = residue['N'] 
                atom_2 = residue['CA'] 
                distance = atom_1-atom_2 
                print distance
            except:
                pass

它也只产生76个结果,这是链的长度。告诉我是否有任何错误,因为我之前没有使用biopython

答案 2 :(得分:-1)

import sys
#from Bio.PDB import *
from Bio.PDB.PDBParser import PDBParser 
from numpy import loadtxt

pdb1 ='1UBQ.pdb'
sys.stdout = open('file_ubq', 'w')
parser=PDBParser(PERMISSIVE=1)

#file=open('1UBQ.pdb','r')
#header_dict=parse_pdb_header(file)
#file.close()
i=1
structure = parser.get_structure('1UBQ',pdb1)
for model in structure:
    for chain in model:
        for residue in chain:
            i = 1
            for atom in residue:
                model = structure[0] 
                chain = model['A'] 
                residue_1 = chain[i] 
                atom_1 = residue_1['N'] 
                atom_2 = residue_1['CA'] 
                distance = atom_1-atom_2 
                #print atom.get_vector(),atom.name,distance
                print distance
                i=i+1

#lines = loadtxt("file_ubq")

This might help you