如何编写具有多个循环元素的字符串模板文件?

2024-06-02 04:41:26 发布

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

在字符串模板中编写for loop元素时,我有一个小问题,如下所示:当我试图用三个循环元素制作一个字符串模板时,我只能打印最后一个元素,而不能打印前两个元素。我认为这个错误是由于写文件时的一些问题造成的,但是我不知道我的代码到底有什么问题。所以如果有人能帮我这个忙。在

My SCRIPT:

from string import Template
import os

AMONIOACIDS = {'A': 'ALA', 'C': 'CYS', 'E': 'GLU', 'D': 'ASP', 'G': 'GLY',
           'F': 'PHE', 'I': 'ILE', 'H': 'HIS', 'K': 'LYS', 'M': 'MET',
           'L': 'LEU', 'N': 'ASN', 'Q': 'GLN', 'P': 'PRO', 'S': 'SER',
           'R': 'ARG', 'T': 'THR', 'W': 'TRP', 'V': 'VAL', 'Y': 'TYR'}

rPrS={'C': '102', 'A': '104','H': '12'}


a=[]
b=[]
count=1
for single, third in AMONIOACIDS.iteritems():
   for rS,rP in rPrS.iteritems():
       if rS == single:
            a.append(["s"+str(count)+"=selection(mdl1.chains["+chain+"].residues["+rP+"])"])
            b.append(["s"+str(count)+".mutate(residue_type='"+third+"')"])


str='''Loop elements\n'''
for i,j in zip (a,b):
    i=''.join(i)
    j=''.join(j)
    str+='''$i\n'''
    str+='''$j\n'''
str=Template(str)
str.substitute(i=i, j=j)
file = open(os.getcwd() + '/' + 'model.py', 'w')
file.write(str.substitute(i=i,j=j))
file.close()

预期输出:

^{pr2}$

我得到的是:

Loop elements
s3=selection(mdl1.chains[A].residues[12])
s3.mutate(residue_type='HIS')
s3=selection(mdl1.chains[A].residues[12])
s3.mutate(residue_type='HIS')
s3=selection(mdl1.chains[A].residues[12])
s3.mutate(residue_type='HIS')

Tags: in元素fors3typecountfilestr
1条回答
网友
1楼 · 发布于 2024-06-02 04:41:26

您的模板将从i的最后一个值和for循环中的j获取其替换值。您需要保存上一次迭代的值。怎样?您可以在每次迭代中使用字典和计数来存储和区分值。在

你可以substitute values in a template using a dictionary。我在每次迭代中都使用count变量来创建相应的字典键:i_0i_1i_2,和{},j_1j_2。这些相同的名称在模板$i_0$i_1$i_2、和{}、$j_1$j_2中用作标识符。在

safe_substitute安全地将每个键上的值替换到模板中,例如将键i_0替换为模板标识符$i_0。在


字典在每次迭代时存储ij的所有值,模板中的替换将在字典中的每个键处取适当的值。此部分应修复:

# your previous lines of code

count = 0
d = {}
s='''Loop elements\n'''
for i,j in zip (a,b):
    d['i_{}'.format(count)] = ''.join(i)
    d['j_{}'.format(count)] = ''.join(j)
    s+='$i_{}\n'.format(count)
    s+='$j_{}\n'.format(count)
    count += 1

print(str)
print(d)
s=Template(s)
file = open(os.getcwd() + '/' + 'model.py', 'w')
file.write(s.safe_substitute(d))
file.close()

我已经将名称str替换为s,以避免隐藏str。在修复之前,不需要在前面的代码块中进行其他更改。在

相关问题 更多 >