【发布时间】:2022-01-13 08:38:33
【问题描述】:
我有一个原子列表。 rep_atoms = [CA, CB, CD3](碳原子)。 我只想从任何给定的 PDB 文件中保存这些。我不想在本地保存它;我希望它保存在内存中(大量迭代)。 我已经到了下面的代码,但是它将文件保存在本地并且非常慢。 所以,我的目标是来自 PDB 中的每个原子,如果它存在于 rep_atoms 中。使 new_pdb 仅存储该信息,以便稍后在我的代码中调用它时,它应该是一个 PDB 文件,而不会保存在我的计算机中的本地文件夹中。
如何附加每个原子?打印所有原子非常快。我想附加它,但它不会是 PDB 结构文件。我该怎么办?
class rep_atom_Select(Select):
def accept_atom(self, atom):
if atom.get_name() in rep_atoms:
return 1
else:
return 0
def rep_atoms_pdb(input_pdb):
io = PDBIO()
io.set_structure(input_pdb)
for model in input_pdb:
for chain in model:
for residue in chain:
for atom in residue:
if atom.get_name() in rep_atoms:
print(atom)
# dnr_only = io.save("dnr_only.pdb", rep_atom_Select())
【问题讨论】:
-
在循环之后保存文件似乎是简单明了的解决方案。
-
从缩进来看,您似乎将 pdb 文件保存在内部 for 循环中。当 io.save 也不在循环中时,您是否检查了性能?
-
@LydiavanDyke 即使性能好,在我的电脑中也会占用大量空间。 (对于任何给定的 pdb,我需要 1000 多个版本的 pdb。)
-
我能想到的一个解决方案是提取原子信息,然后附加到文件中。像 Atom、Atom_SeqNo、Res、Res_ID 等等。但我认为这会在某个地方出现缩进和所有问题。
-
@tripleee 很抱歉,但我无法理解您的意思。 Lydia van Dyke 也说过类似的话。我不能将 io.save 放在其他地方,给我缩进错误。
标签: biopython protein-database