Я попытался создать шаблон для example.py с помощью строки Template, где я заменяю каждый элемент цикла в $ i ["CA:" + $ i + ':' + ""]. Частично он работает, но заменяет только последний элемент.Как добавить все элементы цикла в одну строку при использовании строкового шаблона?
Но я хочу добавить все значения в одну строку с определенным форматом.
Например:
Что мой текущий скрипт делает это следующим образом:
for i in range(1,4):
#It takes each "i" elements and substituting only the last element
str='''s=selection(self.atoms["CA:"+$i+':'+" "].select_sphere(10))
Что я получаю выглядит следующим образом:
s=selection(self.atoms["CA:"+3+':'+" "].select_sphere(10))
Что, Я ожидаю г выглядит следующим образом:
s=selection (self.atoms["CA:"+1+':'+" "].select_sphere(10),self.atoms["CA:"+2+':'+" "].select_sphere(10),self.atoms["CA:"+3+':'+" "].select_sphere(10))
Мой сценарий:
import os
from string import Template
for i in range(1,4):
str='''
s=selection(self.atoms["CA:"+$i+':'+" "].select_sphere(10))
'''
str=Template(str)
file = open(os.getcwd() + '/' + 'example.py', 'w')
file.write(str.substitute(i=i))
file.close()
Я использую эти два сценария, чтобы получить нужный мне результат:
import os
from string import Template
a=[]
for i in range(1,4):
a.append(''.join("self.atoms["+ "'CA:' "+str(i)+""':'+" "+"]"+".select_sphere(10)"))
str='''s=selection($a).by_residue()'''
str=Template(str)
file = open(os.getcwd() + '/' + 'example.py', 'w')
file.write(str.substitute(a=a))
with open('example.py', 'w') as outfile:
selection_template = '''self.atoms["CA:"+{}+':'+" "].select_sphere(10)'''
selections = [selection_template.format(i) for i in range(1, 4)]
outfile.write('s = selection({})\n'.format(', '.join(selections)))
Thanks alot mhawke – DarwinCode