Python 模板
Python 提供了不同的文本格式化功能。包括格式化操作符、Python 的 format() 函数和 f-string。此外,Python 的标准库包含了 string 模块,该模块提供了更多的格式化选项。
string 模块中的 Template 类对于通过PEP 292 中描述的替换技术动态形成字符串对象非常有用。它的简单语法和功能使得在国际化的情况下比其他内置的 Python 字符串格式化工具更容易翻译。
模板字符串使用 $ 符号进行替换。符号后面紧跟一个符合 Python 标识符形成规则的标识符。
语法
from string import Template
tempStr = Template('Hello $name')
Template类定义了以下方法 –
substitute()
此方法执行模板对象中标识符的值替换。可以使用关键字参数或字典对象来映射模板中的标识符。该方法返回一个新字符串。
示例1
以下代码使用关键字参数来调用substitute()方法。
from string import Template
tempStr = Template('Hello. My name is name and my age isage')
newStr = tempStr.substitute(name = 'Pushpa', age = 26)
print (newStr)
它将产生以下 输出 −
Hello. My name is Pushpa and my age is 26
示例2
在下例中,我们使用一个字典对象来映射模板字符串中的替代标识符。
from string import Template
tempStr = Template('Hello. My name is name and my age isage')
dct = {'name' : 'Pushpalata', 'age' : 25}
newStr = tempStr.substitute(dct)
print (newStr)
它将产生以下 输出 −
Hello. My name is Pushpalata and my age is 25
示例3
如果substitute()方法的参数不足以与模板字符串中的标识符匹配,Python会引发KeyError异常。
from string import
tempStr = Template('Hello. My name is name and my age isage')
dct = {'name' : 'Pushpalata'}
newStr = tempStr.substitute(dct)
print (newStr)
它将产生以下 输出 −
Traceback (most recent call last):
File "C:\Users\user\example.py", line 5, in
newStr = tempStr.substitute(dct)
^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python311\Lib\string.py", line 121, in substitute
return self.pattern.sub(convert, self.template)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python311\Lib\string.py", line 114, in convert
return str(mapping[named])
~~~~~~~^^^^^^^
KeyError: 'age'
safe_substitute()
此方法与substitute()方法类似,只是在键不足或不匹配时不会抛出错误。相反,原始的占位符将完整地出现在结果字符串中。
示例4
from string import Template
tempStr = Template('Hello. My name is name and my age isage')
dct = {'name' : 'Pushpalata'}
newStr = tempStr.safe_substitute(dct)
print (newStr)
将产生以下 输出 −
Hello. My name is Pushpalata and my age is $age
is_valid()
如果模板具有无效的占位符,会导致substitute()引发ValueError,则返回false。
get_identifiers()
返回模板中有效标识符的列表,按它们首次出现的顺序排列,忽略任何无效的标识符。
示例5
from string import Template
tempStr = Template('Hello. My name is name and my age is23')
print (tempStr.is_valid())
tempStr = Template('Hello. My name is name and my age isage')
print (tempStr.get_identifiers())
它将产生以下 输出 −
False
['name', 'age']
示例6
$
符号被定义为替代字符。如果您需要在字符串中出现 $
本身,必须进行转义。换句话说,使用 $$
在字符串中使用它。
它将产生以下 输出 −
The symbol for Dollar is $
示例7
如果您希望将任何其他字符用作替换符号而不是”$”,请声明Template类的一个子类并进行赋值−
from string import Template
class myTemplate(Template):
delimiter = '#'
tempStr = myTemplate('Hello. My name is #name and my age is #age')
print (tempStr.substitute(name='Harsha', age=30))