如何将 PyMOL 中的命令输出保存到 txt 文件?

How can I save command outputs in PyMOL to a txt file?

我是 PyMOL 的新手,我正在尝试编写一个 python 脚本来生成一个 .txt 文件并将 PyMOL 命令输出保存到其中。假设它有一个包含 pdb 文件名称的数组和一个将每个文件与某个特定蛋白质对齐的 for 循环:

pdb = ["191L", "192L", "193L", "194L"]

cmd.fetch("190L")

for i in pdb:
cmd.fetch(i)
cmd.align(i, "190L")

PyMOL 将计算每个比对的 RMSD。我如何编写我的脚本,以便它获取每个 RMSD 并将其保存到文本文件中?

这是我目前的情况:

def get_rmsd():

cmd.fetch("190L")
for i in pdb:
   cmd.fetch(i)
   output = open("rmsd.txt", "w")
   data = cmd.align(i, "190L")
   data = str(data)
   output.write(data)
   stored.f.close()

当我在 PyMOL 上调用函数时,它会像预期的那样获取和对齐文件,但没有创建文本文件。

我不会使用 pymol.Scratch_Storage class。我会保持简单并做类似的事情:

  1. 新建文件“test.py”

  2. 复制以下内容:

    from pymol import cmd
    import os
    
    
    def get_rmsd(pdbs, align_to):
        # a bit more reusable
        cmd.fetch(align_to)
        with open("rmsd.txt", "w") as w:
            # using context management will close the rmsd.txt automatically
            for pdb in pdbs:
                cmd.fetch(pdb)
                line = cmd.align(pdb, align_to)
                w.write(f"{line}\n")
    
        print(f"outfile: {os.path.join(os.getcwd(), 'rmsd.txt')}")
    
    
    get_rmsd(["191L", "192L", "193L", "194L"], "190l")
    
  3. 来自 PyMOL 终端的
  4. 运行 脚本:run test.py

找到了我自己的问题的答案,解决方法非常简单,哈哈。

为每个所需的输出分配变量,例如:

output = cmd.align("190L", "191L")

运行 PyMOL 中的脚本原样,然后将 python 代码逐行输入其中,以“python”开始,以“python”结束结尾。”就我而言,类似于:

python
with open("rmsd.txt", "w") as f:
   f.write(output)
f.close()
python end

一个非常基本的示例,但这就是它的要点。

for i in pdb:
   cmd.fetch(i)
   output = open("rmsd.txt", "w")
   data = cmd.align(i, "190L")
   data = str(data)
   output.write(data)
   stored.f.close()

尝试:

for i in pdb:
   cmd.fetch(i)
   output = open("rmsd.txt", "a")
   data = cmd.align(i, "190L")
   output.write("%s\n" % data)
   output.close()

应该做这份工作