如何将 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。我会保持简单并做类似的事情:
新建文件“test.py”
复制以下内容:
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")
来自 PyMOL 终端的 运行 脚本: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()
应该做这份工作
我是 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。我会保持简单并做类似的事情:
新建文件“test.py”
复制以下内容:
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")
来自 PyMOL 终端的 运行 脚本:
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()
应该做这份工作