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

2024-06-17 11:51:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我是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上调用该函数时,它会像预期的那样获取并对齐文件,但不会创建文本文件


Tags: 文件intxt脚本cmdforoutputdata
3条回答

我不会使用pymol.Scratch_Storage类。我会保持它的简单性,并做一些类似的事情:

  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终端运行脚本:run test.py

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

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

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

按原样在PyMOL中运行脚本,然后逐行将python代码输入其中,以“python”开头,以“python end”结尾

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

我应该做这项工作

相关问题 更多 >