0

我想创建一个循环来更改 PyMol 中的交互名称。但是在一个选择循环之后它崩溃并且不起作用。

def get_dists(interactions): # interactions=([1,2], [3,4])

    for i in interactions:
        a = "////" + str(i[0]) + "/C2'"
        b = "////" + str(i[1]) + "/C2'"
        cmd.distance("(" + a + ")", "(" + b + ")")

        for j in range(1, 599):
            x = "dist" + "0" + str(j)
            y = str(i[0]) + " " + str(i[1])
            cmd.set_name(str(x), str(y))

在 Pymol 中,交互的默认名称是 dist01、02、03。

我想将这些更改为 1_3、5_59、4_8(残基之间的交互)。

4

1 回答 1

1

您的代码完全没问题,除了一件事:如果 PyMol 没有成功使用 set_name ,则整个脚本将被中止。当您将其更改为时,它应该可以工作:

try:
    cmd.set_name(str(x), str(y))
except:
    print('failed to rename')

一些额外的评论:

  • y = str(i[0]) + " " + str(i[1])应该y = str(i[0]) + "_" + str(i[1])
  • 此行可能用于填充零x = "dist" + "0" + str(j)。仅当j是单个数字时才需要,否则距离对象的名称是dist20dist123
  • cmd.set_name(str(x), str(y))可以简化为cmd.set_name(x, y)sincexyare already strings
于 2016-06-26T16:21:34.820 回答