如何在Python中利用已有列表/数组生成含完整信息的.pdb文件
基于Biopython生成PDB文件的实现方法
前置条件
你已备好长度严格对齐的5组输入数据:原子编号列表、原子名称列表、CA坐标数组(每个元素为(x,y,z)格式的三维浮点坐标)、残基编号列表、残基名称列表,且Python环境已安装Biopython库。
实现步骤
Biopython的PDB模块采用层级式结构存储蛋白信息:Structure→Model→Chain→Residue→Atom,按层级依次构建对象后即可导出为标准PDB文件。
- 导入依赖模块
from Bio.PDB import Structure, Model, Chain, Residue, Atom, PDBIO import numpy as np
- 初始化层级结构容器
# 自定义结构、模型、链的命名,可按需修改 struct = Structure.Structure("custom_structure") model = Model.Model(0) chain = Chain.Chain("A") # 链ID设为A,可自定义 struct.add(model) model.add(chain)
- 遍历输入数据创建原子与残基
如果你的数据中每个残基仅含1个CA原子,可直接按索引遍历:
# 遍历所有原子对应数据,变量名替换为你自己的列表/数组名即可 for idx in range(len(atom_id_list)): # 提取当前原子对应参数 atom_serial = atom_id_list[idx] atom_name = atom_name_list[idx] coord = ca_coord_array[idx] res_seq = res_id_list[idx] res_name = res_name_list[idx] # 创建残基,第一个参数为异原子标识,普通氨基酸留空即可 res = Residue.Residue((' ', res_seq, ' '), res_name, '') # 创建原子对象 atom = Atom.Atom( name=atom_name, coord=coord, bfactor=0.0, # 温度因子,无数据可填0 occupancy=1.0, # 占有率,无数据可填1 altloc=' ', fullname=f"{atom_name:<4s}", # 按PDB规范补空格到4位 serial_number=atom_serial ) # 按层级组装 res.add(atom) chain.add(res)
如果同一个残基包含多个原子,需要先对残基编号去重,同一个残基的所有原子添加到同一个Residue对象中即可。
4. 导出为PDB文件
io = PDBIO() io.set_structure(struct) io.save("output.pdb")
注意事项
- 原子名称需符合PDB命名规范,例如Cα原子的标准名称为前后补空格的
CA(总长度4位),避免下游软件读取时识别错误 - 残基编号如果存在插入码,需要在Residue初始化的第一个元组的第三个位置填入对应插入码,例如
(' ', 10, 'A')对应10号残基的插入码A
内容的提问来源于stack exchange,提问作者Jingtong Zhao
相关产品推荐
相关产品推荐

