我正在尝试学习字符串模板模块并使用替代分隔符面临打嗝.
temp_text_dollar的变量名前缀为$,它可以正常工作
>>> import string
>>> val = {'a1':'VAL1' , 'a2' : 'VAL2' , 'a3' : 'VAL3' , 'a4' : 'VAL4' }
>>> temp_text_dollar = string.Template(" This is a sample text ${a1} $a3 ")
>>> print temp_text_dollar.substitute(val)
This is a sample text VAL1 VAL3
>>> print temp_text_dollar.delimiter
$
>>> print temp_text_dollar.idpattern
[_a-z][_a-z0-9]*
>>> print temp_text_dollar.template
This is a sample text ${a1} $a3
temp_text_pct的变量名称以%为前缀,但不起作用.
>>> temp_text_pct = string.Template(" This is a sample text %a1 %a3 ")
>>> class MyTemplate(string.Template):
... delimiter = '%'
... idpattern = '[a-z]*'
...
>>> t2 = MyTemplate(temp_text_pct)
>>> print t2.substitute(val)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/string.py", line 172, in substitute
return self.pattern.sub(convert, self.template)
TypeError: expected string or buffer
>>> print t2.delimiter
%
>>> print t2.idpattern
[a-z]*
看起来像拼写错误,我无法破解它.
可以使用string.Template替换%变量吗?
最佳答案 您从模板创建了一个模板:
>>> temp_text_amp = string.Template(" This is a sample text %a1 %a3 ")
[...]
>>> t2 = MyTemplate(temp_text_amp)
temp_text_amp不是字符串.这就是导致您看到的追溯的原因.
从字符串创建模板对象:
t2 = MyTemplate(" This is a sample text %a1 %a3 ")
您的下一个问题是您将idpattern限制为仅字母:
idpattern = '[a-z]*'
但是你的实际模板字符串也使用数字.
这很好用:
>>> import string
>>> class MyTemplate(string.Template):
... delimiter = '%'
... idpattern = '[a-z0-9]*'
...
>>> t2 = MyTemplate(" This is a sample text %a1 %a3 ")
>>> val = {'a1':'VAL1' , 'a2' : 'VAL2' , 'a3' : 'VAL3' , 'a4' : 'VAL4' }
>>> t2.substitute(val)
' This is a sample text VAL1 VAL3 '