我正在尝试为.pdb文件(它们显示蛋白质结构)编写一个快速解析器。我正在研究的一个蛋白质的例子是KRAS (癌症中常见的),这里是:http://www.rcsb.org/pdb/files/3GFT.pdb
如果向下滚动到足够远,您将看到如下所示的行: ATOM 1N MET A 1 63.645 97.355 31.526 1.00 33.80 N
第一个元素“原子”意味着它与蛋白质中的一个实际原子有关。1涉及一般计数,N涉及原子的类型,"MET“是残基的名称,"A”涉及链的类型,1(第二个"1")是原子计数,然后接下来的3个数字是空间中的x-y-z位置。
我需要的输出是这样的(下面的"1“对应于原子计数,而不是一般计数):MET A 1 63.645 97.355 31.526
更复杂的是,有时原子计数(本例中的第二个"1“)是负数。在这些情况下,我想跳过这一行,继续,直到我点击一个正的条目,因为这些元素与找到位置所需的生物化学有关,而不是实际的蛋白质。更糟糕的是,有时你会得到这样的一行:
ATOM 139 CA AILE A 21 63.260 111.496 12.203 0.5012.87C
ATOM 140CA胆汁A 21 63.275 111.495 12.201 0.50 12.17 C
虽然他们都提到残基21,但生物化学不够精确,无法获得确切的位置,所以他们给出了两个选择。理想情况下,我会指定"1“、"2”或其他任何值,但如果我只选择第一个选项,就可以了。最后,对于我原始示例中的原子类型("N"),我只想获得那些带有"CA“的行。
我是python的新手,我的训练是生物统计学,所以我想知道做这件事的最好方法是什么?我要用for循环逐行解析这个代码吗?在python中有没有更快的方法呢?如何处理某些原子的重复条目?
我知道这有点问,但一些指导将是非常有帮助的!我已经使用R编写了所有的统计数据位,但现在我只需要将我的文件转换为正确的格式!
谢谢!
发布于 2012-04-26 07:34:39
这是一个很长的描述。我不确定我是否全部正确:-)如果字段(以ATOM开头的行)是固定的,您可以使用拆分和一些并列。我使用了一个散列来查看该条目是否已被查看,从而按照您的要求消除重复项。希望这能给你一个开始,
visited = {}
for line in open('3GFT.pdb'):
list = line.split()
id = list[0]
if id == 'ATOM':
type = list[2]
if type == 'CA':
residue = list[3]
type_of_chain = list[4]
atom_count = int(list[5])
position = list[6:8]
if atom_count >= 0:
if type_of_chain not in visited:
visited[type_of_chain] = 1
print residue,type_of_chain,atom_count,' '.join(position)将输出,
MET A 1 62.935 97.579
GLY B 0 39.524 105.916
GLY C 0 67.295 110.376
MET D 1 59.311 124.106
GLY E 0 44.038 96.819
GLY F 0 44.187 123.590发布于 2020-05-06 23:50:00
发布于 2012-04-26 07:28:11
它看起来像是一个解析PDB文件的库已经存在。查看:
http://www.csb.pitt.edu/prody/index.html
简单地浏览一下教程,似乎这就是你所说的,不是吗?
http://www.csb.pitt.edu/prody/tutorial.html#atomic-data
https://stackoverflow.com/questions/10324674
复制相似问题