📜  Python中的字符串模板类

📅  最后修改于: 2022-05-13 01:54:39.009000             🧑  作者: Mango

Python中的字符串模板类

在字符串模块中,模板类允许我们为输出规范创建简化的语法。该格式使用由 $ 组成的占位符名称和有效的Python标识符(字母数字字符和下划线)。用大括号包围占位符允许它后面跟更多的字母数字字母,中间没有空格。写入 $$ 会创建一个转义的 $。

Python字符串模板:

Python字符串模板是通过将模板字符串传递给其构造函数来创建的。它支持基于 $ 的替换。这个类有两个关键方法:

  • 替换(映射,**kwds):此方法使用字典执行替换,其过程类似于基于键的映射对象。关键字参数也可以用于相同的目的。如果基于键的映射和关键字参数具有相同的键,则会抛出TypeError 。如果缺少键,则返回KeyError
  • safe_substitute(mapping, **kwds):此方法的行为类似于替换方法,但如果缺少键,它不会抛出KeyError ,而是在结果字符串中返回一个占位符。

当字典或关键字参数中未提供占位符时,substitute() 方法会引发 KeyError。对于邮件合并风格的应用程序,用户提供的数据可能不完整,而 safe_substitute() 方法可能更合适——如果数据丢失,它将保持占位符不变:

下面是几个简单的例子。
示例 1:

Python3
# A Simple Python template example
from string import Template
 
# Create a template that has placeholder for value of x
t = Template('x is $x')
 
# Substitute value of x in above template
print (t.substitute({'x' : 1}))


Python3
# A Python program to demonstrate the
# working of the string template
from string import Template
 
# List Student stores the name and marks of three students
Student = [('Ram',90), ('Ankit',78), ('Bob',92)]
 
# We are creating a basic structure to print the name and
# marks of the students.
t = Template('Hi $name, you have got $marks marks')
 
for i in Student:
     print (t.substitute(name = i[0], marks = i[1]))


Python3
from string import Template
 
template = Template('$name is the $job of $company')
 
string = template.safe_substitute(name='Raju Kumar',
                      job='TCE')
print(string)


Python3
t = Template('I am $name from $city')
print('Template String =', t.template)


Python3
template = Template('$$ is the symbol for $name')
string = template.substitute(name='Dollar')
print(string)


Python3
template = Template( 'That $noun looks ${noun}y')
string = template.substitute(noun='Fish')
print(string)


输出:

x is 1

以下是另一个示例,我们从列表中导入学生的姓名和分数并使用模板打印它们。
示例 2:

Python3

# A Python program to demonstrate the
# working of the string template
from string import Template
 
# List Student stores the name and marks of three students
Student = [('Ram',90), ('Ankit',78), ('Bob',92)]
 
# We are creating a basic structure to print the name and
# marks of the students.
t = Template('Hi $name, you have got $marks marks')
 
for i in Student:
     print (t.substitute(name = i[0], marks = i[1]))

输出:

Hi Ram, you have got 90 marks

Hi Ankit, you have got 78 marks

Hi Bob, you have got 92 marks

下面的示例显示了 safe_substitute 方法的实现。
示例 3:

Python3

from string import Template
 
template = Template('$name is the $job of $company')
 
string = template.safe_substitute(name='Raju Kumar',
                      job='TCE')
print(string)

输出:

Raju Kumar is the TCE of $company

请注意,我们没有为“$company”占位符提供任何数据,但它不会抛出错误,而是将占位符作为字符串返回,如上所述。

打印模板字符串

Template 对象的“template”属性可用于返回模板字符串,如下所示:
例子:

Python3

t = Template('I am $name from $city')
print('Template String =', t.template)

输出:

Template String = I am $name from $city 

转义 $ 符号

$$可用于转义$并将其视为字符串的一部分。
例子:

Python3

template = Template('$$ is the symbol for $name')
string = template.substitute(name='Dollar')
print(string)

输出:

$ is the symbol for Dollar 

${标识符}

${Identifier} 的工作方式与 $Identifier 类似。当有效标识符字符跟随占位符但不是占位符的一部分时,它会派上用场。
例子:

Python3

template = Template( 'That $noun looks ${noun}y')
string = template.substitute(noun='Fish')
print(string)

输出:

That Fish looks Fishy

模板的另一个应用是将程序逻辑与多种输出格式的细节分开。这使得用自定义模板替换 XML 文件、纯文本报告和 HTML Web 报告成为可能。
请注意,还有其他方法可以打印格式化输出,例如整数的 %d、浮点数的 %f 等(有关详细信息,请参阅此内容)
参考:https://docs。 Python.org/3.3/tutorial/stdlib2.html