如何解决如何将PyMOL中的命令输出保存到txt文件?
我是PyMOL的新手,我正在尝试编写一个Python脚本,该脚本将生成.txt文件并将PyMOL命令输出保存到其中。假设它有一个包含pdb文件名称的数组和一个for循环,该循环将每个文件与某种特定的蛋白质对齐:
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将为每个比对计算RMSD。如何编写我的脚本,以便它将每个RMSD都保存下来并保存到文本文件中?
这是我到目前为止所拥有的:
<template>
<table
:style="{ backgroundColor: element.options.backgroundColor }"
class="main"
width="100%"
cellspacing="0"
cellpadding="0"
border="0"
align="center"
style="display: table;"
data-type="title"
>
<tbody>
<tr>
<td>
class="border-9/5 border-dashed border-transparent hover:border-blue-200"
:class="{
'border-builder-blue shadow border-dashed cursor-auto hover:border-builder-blue':
element.active,'cursor-pointer': !element.active,}"
>
<div
:align="element.options.align"
:style="{
paddingTop: element.options.padding[0],paddingRight: element.options.padding[1],paddingBottom: element.options.padding[2],paddingLeft: element.options.padding[3],}"
style="color: #757575;"
data-block-id="background"
>
<editor-content :editor="computedEditor" />
</div>
</div>
</td>
</tr>
</tbody>
</table>
</template>
<script>
import { EditorContent,Editor } from 'tiptap';
export default {
components: {
EditorContent,},props: ['element'],data() {
return {
content: null,options: {},id: '',};
},computed: {
computedEditor: {
get() {
return this.$store.state.email.editors[0].editor;
},set(value) {
this.$store.commit('email/testEditorUpdate',value);
},};
</script>
<style></style>
当我在PyMOL上调用该函数时,它会像预期的那样获取并对齐文件,但是没有创建文本文件。
解决方法
我不会使用pymol.Scratch_Storage
类。我会保持简单并做类似的事情:
-
创建一个新文件“ 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 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()
应该做的事情
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。