【问题标题】:Python String Template - Using percentage delimiterPython 字符串模板 - 使用百分比分隔符
【发布时间】:2014-06-23 10:07:51
【问题描述】:

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

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 可以用来代替% 变量吗?

【问题讨论】:

    标签: python templates python-2.7


    【解决方案1】:

    从模板创建了模板:

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

    【讨论】:

    • 谢谢 Martijn。没有注意到idpattern 中缺少数字。但是val 具有a1a3 键的值
    • @Manuel:啊,我知道我在自己的会话中犯了什么错误,删除了那行。我最初在模式中省略了*
    猜你喜欢
    • 2021-06-12
    • 2016-10-30
    • 1970-01-01
    • 2016-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-10
    • 1970-01-01
    相关资源
    最近更新 更多