Python - 模板


Python 提供了不同的文本格式化功能。它包括格式化运算符、Python 的 format() 函数和 f 字符串。此外,Python 的标准库包含带有更多格式化选项的字符串模块。

string 模块中的 Template 类对于通过 PEP 292 中描述的替换技术动态形成字符串对象非常有用。与 Python 中的其他内置字符串格式化工具相比,它更简单的语法和功能使得在内部化的情况下更容易翻译。

模板字符串使用$符号进行替换。该符号后面紧跟着一个标识符,该标识符遵循形成有效 Python 标识符的规则。

句法

from string import Template

tempStr = Template('Hello $name')

Template 类定义了以下方法 -

代替()

此方法执行模板对象中标识符的值替换。使用关键字参数或字典对象可用于映射模板中的标识符。该方法返回一个新字符串。

实施例1

以下代码使用替换()方法的关键字参数。

from string import Template

tempStr = Template('Hello. My name is $name and my age is $age')
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 is $age')
dct = {'name' : 'Pushpalata', 'age' : 25}
newStr = tempStr.substitute(dct)
print (newStr)

它将产生以下输出-

Hello. My name is Pushpalata and my age is 25

实施例3

如果没有为 Replace() 方法提供足够的参数来与模板字符串中的标识符进行匹配,Python 将引发 KeyError。

from string import 

tempStr = Template('Hello. My name is $name and my age is $age')
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'

安全替代()

此方法的Behave与 Replace() 方法类似,但如果键不充足或不匹配,它不会抛出错误。相反,原始占位符将完整地出现在结果字符串中。

实施例4

from string import Template
tempStr = Template('Hello. My name is $name and my age is $age')
dct = {'name' : 'Pushpalata'}
newStr = tempStr.safe_substitute(dct)
print (newStr)

它将产生以下输出-

Hello. My name is Pushpalata and my age is $age

已验证()

如果模板具有无效占位符,将导致 Replace() 引发 ValueError,则返回 false。

获取标识符()

返回模板中有效标识符的列表(按照它们首次出现的顺序),忽略任何无效标识符。

实施例5

from string import Template

tempStr = Template('Hello. My name is $name and my age is $23')
print (tempStr.is_valid())
tempStr = Template('Hello. My name is $name and my age is $age')
print (tempStr.get_identifiers())

它将产生以下输出-

False

['name', 'age']

实施例6

“$”符号已被定义为替换字符。如果您需要 $ 本身出现在字符串中,则必须对其进行转义。换句话说,使用$$在字符串中使用它。

from string import Template

tempStr = Template('The symbol for Dollar is $$')
print (tempStr.substitute())

它将产生以下输出-

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