私はかつてhttp://pelican.rsvs.ulaval.ca/mediawiki/index.php/Manipulating_PDB_files_using_BioPythonのコード「残留物の除去」を使用しました
一部のヘテロ原子が欠落します。detach_childが呼び出されるたびにチェーンが変わるためかもしれません。
for model in structure:
for chain in model:
for reisdue in chain:
id = residue.id
if id[0] != ' ':
chain.detach_child(id)
if len(chain) == 0:
model.detach_child(chain.id)
以下のように変更した後(イテラブルを動的に変更することは避けてください)、私にとってはうまくいきました。(ここでは構造 [0]のみを使用しました。)
model = structure[0]
residue_to_remove = []
chain_to_remove = []
for chain in model:
for residue in chain:
if residue.id[0] != ' ':
residue_to_remove.append((chain.id, residue.id))
if len(chain) == 0:
chain_to_remove.append(chain.id)
for residue in residue_to_remove:
model[residue[0]].detach_child(residue[1])
for chain in chain_to_remove:
model.detach_child(chain)