You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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())

关键改动

  1. 定义NoTERSelect类继承自Select,重写write_termination方法使其不执行任何写入操作,从而跳过TER行生成。
  2. 调用pdb_io.save()时,通过select参数传入自定义选择器实例。

处理后保存的PDB文件将不再包含多余TER行,仅保留原文件结构并完成SER残基的坐标修改。

内容的提问来源于stack exchange,提问作者Irene Ferfoglia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 01:48:32