Python的string模块中的Template类字符串模板用法


Posted in Python onJune 27, 2016

string.Template()
string.Template()内添加替换的字符, 使用"$"符号, 或 在字符串内, 使用"${}"; 调用时使用string.substitute(dict)函数.
可以通过继承"string.Template", 覆盖变量delimiter(定界符)和idpattern(替换格式), 定制不同形式的模板.

代码:

# -*- coding: utf-8 -*- 

import string 
 
template_text = ''''' 
  Delimiter : %% 
  Replaced : %with_underscore 
  Ingored : %notunderscored 
''' 
 
d = {'with_underscore' : 'replaced', 
   'notunderscored' : 'not replaced'} 
 
class MyTemplate(string.Template): 
  delimiter = '%' 
  idpattern = '[a-z]+_[a-z]+' 
   
t = MyTemplate(template_text) 
print('Modified ID pattern: ') 
print(t.safe_substitute(d))

输出:

Modified ID pattern:  
 
  Delimiter : % 
  Replaced : replaced 
  Ingored : %notunderscored

注意: 定界符(delimiter)为"%", 替换模式(idpattern)必须包含下划线, 所以第2个没有进行替换.

正则替换

string.Template的pattern是一个正则表达式, 可以通过覆盖pattern属性, 定义新的正则表达式.
如: 使用新的定界符"{{", 把{{var}}作为变量语法.

代码:

import string 
 
t = string.Template('$var') 
print(t.pattern.pattern) 
 
class MyTemplate(string.Template): 
  delimiter = '{{' 
  pattern = r''''' 
  \{\{(?: 
   (?P<escaped>\{\{) |  # Escape sequence of two delimiters 
   (?P<named>[_a-z][_a-z0-9]*)\}\}   |  # delimiter and a Python identifier 
   {(?P<braced>[_a-z][_a-z0-9]*)}\}\}  |  # delimiter and a braced identifier 
   (?P<invalid>)       # Other ill-formed delimiter exprs 
  ) 
  ''' 
   
t2 = MyTemplate(''''' 
{{{{ 
{{var}} 
''') 
 
print('MATCHES: ', t2.pattern.findall(t2.template)) 
print('SUBSTITUTED: ', t2.safe_substitute(var='replacement'))

输出:

\$(?: 
   (?P<escaped>\$) |  # Escape sequence of two delimiters 
   (?P<named>[_a-z][_a-z0-9]*)   |  # delimiter and a Python identifier 
   {(?P<braced>[_a-z][_a-z0-9]*)}  |  # delimiter and a braced identifier 
   (?P<invalid>)       # Other ill-formed delimiter exprs 
  ) 
   
MATCHES: [('{{', '', '', ''), ('', 'var', '', '')] 
SUBSTITUTED:  
{{ 
replacement

字符串模板的安全替换(safe_substitute)
字符串模板(sting.Template), 替换时, 使用substitute(), 未能提供模板所需的全部参数值时, 会发生异常.
如果使用safe_substitute(), 即安全替换, 则会替换存在的字典值, 保留未存在的替换符号.

代码:

import string 
 
values = {'var' : 'foo'} 
 
t = string.Template('''''$var is here but $ missing is not provided! ''') 
 
 
try: 
  print 'substitute() : ', t.substitute(values) 
except ValueError as err: 
  print 'Error:', str(err) 
   
print 'safe_substitude() : ', t.safe_substitute(values)

输出:

substitute() : Error: Invalid placeholder in string: line 1, col 18 
safe_substitude() : foo is here but $ missing is not provided!

Python 相关文章推荐
python写的ARP攻击代码实例
Jun 04 Python
Python将阿拉伯数字转换为罗马数字的方法
Jul 10 Python
举例讲解Python中的Null模式与桥接模式编程
Feb 02 Python
你应该知道的python列表去重方法
Jan 17 Python
django中模板的html自动转意方法
May 27 Python
Ubuntu下Python2与Python3的共存问题
Oct 31 Python
浅谈python实现Google翻译PDF,解决换行的问题
Nov 28 Python
详解Python3注释知识点
Feb 19 Python
Pytorch修改ResNet模型全连接层进行直接训练实例
Sep 10 Python
Django实现简单网页弹出警告代码
Nov 15 Python
详解基于Jupyter notebooks采用sklearn库实现多元回归方程编程
Mar 25 Python
Django ModelForm组件原理及用法详解
Oct 12 Python
Python的Flask框架及Nginx实现静态文件访问限制功能
Jun 27 #Python
总结网络IO模型与select模型的Python实例讲解
Jun 27 #Python
结合Python的SimpleHTTPServer源码来解析socket通信
Jun 27 #Python
Python的Tornado框架的异步任务与AsyncHTTPClient
Jun 27 #Python
深入解析Python中的descriptor描述器的作用及用法
Jun 27 #Python
Python中的字符串查找操作方法总结
Jun 27 #Python
解析Python中的__getitem__专有方法
Jun 27 #Python
You might like
用php+javascript实现二级级联菜单的制作
2008/05/06 PHP
PHP入门教程之表单与验证实例详解
2016/09/11 PHP
PHP工厂模式的日常使用
2019/03/20 PHP
Laravel框架实现抢红包功能示例
2019/10/31 PHP
jQuery $.each的用法说明
2010/03/22 Javascript
javascript 模式设计之工厂模式详细说明
2010/05/10 Javascript
Javascript 自适应高度的Tab选项卡
2011/04/05 Javascript
JavaScript+CSS控制打印格式示例介绍
2014/01/07 Javascript
javascript关于继承解析
2016/05/10 Javascript
JavaScript对象的浅拷贝与深拷贝实例分析
2018/07/25 Javascript
layerUI下的绑定事件实例代码
2018/08/17 Javascript
记一次用ts+vuecli4重构项目的实现
2020/05/21 Javascript
vue 解决provide和inject响应的问题
2020/11/12 Javascript
Vue $attrs &amp; inheritAttr实现button禁用效果案例
2020/12/07 Vue.js
[07:38]2014DOTA2国际邀请赛 Newbee顺利挺进胜者组赛后专访
2014/07/15 DOTA
Python 开发Activex组件方法
2009/11/08 Python
Python入门篇之列表和元组
2014/10/17 Python
Django中更新多个对象数据与删除对象的方法
2015/07/17 Python
python3 requests中使用ip代理池随机生成ip的实例
2018/05/07 Python
Python实现在某个数组中查找一个值的算法示例
2018/06/27 Python
pandas去重复行并分类汇总的实现方法
2019/01/29 Python
Python3之不使用第三方变量,实现交换两个变量的值
2019/06/26 Python
python创建与遍历List二维列表的方法
2019/08/16 Python
Python实现i人事自动打卡的示例代码
2020/01/09 Python
关于iframe跨域使用postMessage的实现
2019/10/29 HTML / CSS
纪伊国屋泰国网上书店:Kinokuniya泰国
2017/12/24 全球购物
行政管理专业推荐信
2013/11/02 职场文书
《穷人》教学反思
2014/04/08 职场文书
运动会演讲稿50字
2014/08/25 职场文书
党支部三严三实对照检查材料思想汇报
2014/09/29 职场文书
班主任工作实习计划
2015/01/16 职场文书
爱情保证书
2015/01/17 职场文书
2015年教师节主持词
2015/07/03 职场文书
远程教育集中轮训基层干部培训班学习心得体会
2016/01/09 职场文书
应届生们该怎么书写求职信?
2019/07/05 职场文书
MySQL系列之九 mysql查询缓存及索引
2021/07/02 MySQL