使用BioPython修改PDB文件后,如何去除保存时新增的TER行?
解决BioPython保存PDB时自动添加TER行的问题
在使用BioPython处理PDB文件(平移SER残基X方向5.5Å)后,保存的新文件中自动生成了多余的TER行,可通过自定义选择器类过滤掉TER记录,具体实现如下:
原因说明
BioPython的PDBIO默认会在不同残基之间插入TER行(表示残基链的终止),但原PDB文件中无该行,因此需要自定义规则阻止其生成。
修改后的代码
from Bio.PDB import PDBParser, PDBIO, Select class NoTERSelect(Select): def accept_chain(self, chain): return True def accept_residue(self, residue): return True def accept_atom(self, atom): return True def write_termination(self, file): # 重写方法,跳过TER行写入 pass def translate_atoms(structure, resname, translation_vector): for model in structure: for chain in model: for residue in chain: if residue.resname == resname: for atom in residue: atom.coord += translation_vector pdb_file = "pdb1.pdb" # 读取PDB文件 pdb_parser = PDBParser(QUIET=True) structure = pdb_parser.get_structure("original_pdb1", pdb_file) # X方向平移向量(5.5Å) translation_vector = [5.5, 0, 0] # 平移SER残基的所有原子 translate_atoms(structure, "SER", translation_vector) # 写入修改后的PDB文件 output_pdb = "modified_pdb1.pdb" pdb_io = PDBIO() pdb_io.set_structure(structure) # 传入自定义选择器跳过TER行 pdb_io.save(output_pdb, select=NoTERSelect())
关键改动
- 定义
NoTERSelect类继承自Select,重写write_termination方法使其不执行任何写入操作,从而跳过TER行生成。 - 调用
pdb_io.save()时,通过select参数传入自定义选择器实例。
处理后保存的PDB文件将不再包含多余TER行,仅保留原文件结构并完成SER残基的坐标修改。
内容的提问来源于stack exchange,提问作者Irene Ferfoglia
相关产品推荐
相关产品推荐

