2013-11-20 50 views
0

我们使用字符串模板通过提供字典来替换Python字符串中的某些值。它工作正常。尽管如此,尽管使用safe_substitute下面的代码并不像预期的那样工作。任何想法为什么?Python字符串模板

from string import Template 
obj = Template("$$Tag$$") 
obj.safe_substitute({}) 

Output : '$Tag$' Expected : '$$Tag$$' 
(As there is no value to replace in the dict supplied .) 

如果我将'##'作为分隔符,'####'会出现同样的问题。任何人都知道为什么它忽略了额外的分隔符?试图了解发生了什么。

+1

'不工作作为expected':你预料究竟会? – njzk2

+0

任何投票的理由期望我没有澄清预期的结果?希望它有一个SO问题。 – Nishant

+0

真棒家伙!我明白这一点,如果这是一个分隔符,逃避这是真正价值的唯一途径!那就是我想知道的细节。它与Linux bash中的'\'相同,我认为。不管怎样,谢谢 。 – Nishant

回答

2

docs

$$是转义;它被替换为单个$

如果你想双$,那么你可以使用类似:

>>> obj = Template("$$$$Tag$$$$") 
>>> obj.safe_substitute({}) 
'$$Tag$$' 
>>> obj.safe_substitute({'Tag':1}) 
'$$Tag$$' 
>>> obj = Template("$$$Tag$$$") #First $ escapes the second $ 
>>> obj.safe_substitute({'Tag':1}) 
'$1$$' 
1

从DOC:

“$$” 是一种逃避;它被替换为单个“$”。

1

你必须把两个美元符号为您输出所需的每个之一:

>>> Template('$$$$Tag$$$$').substitute() 
'$$Tag$$'