Python字符串模板 – 使用百分比分隔符

我正在尝试学习字符串模板模块并使用替代分隔符面临打嗝.

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 '
点赞