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基础教程之序列详解
Aug 29 Python
Python利用Beautiful Soup模块创建对象详解
Mar 27 Python
Python实现的微信公众号群发图片与文本消息功能实例详解
Jun 30 Python
Python编程实现使用线性回归预测数据
Dec 07 Python
对python中两种列表元素去重函数性能的比较方法
Jun 29 Python
利用anaconda作为python的依赖库管理方法
Aug 13 Python
django框架基于queryset和双下划线的跨表查询操作详解
Dec 11 Python
在Anaconda3下使用清华镜像源安装TensorFlow(CPU版)
Apr 19 Python
Python使用Matlab命令过程解析
Jun 04 Python
Python趣味实例,实现一个简单的抽奖刮刮卡
Jul 18 Python
python如何编写类似nmap的扫描工具
Nov 06 Python
详解Django的MVT设计模式
Apr 29 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
第十三节 对象串行化 [13]
2006/10/09 PHP
php轻松实现中英文混排字符串截取
2014/05/28 PHP
PHP多维数组遍历方法(2种实现方法)
2015/12/10 PHP
浅谈PHP中的
2016/04/23 PHP
php错误日志简单配置方法
2016/07/11 PHP
用Javascript实现UTF8编码转换成gb2312编码
2006/12/22 Javascript
JS+DIV实现鼠标划过切换层效果的实例代码
2013/11/26 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
javascript表格隔行变色加鼠标移入移出及点击效果的方法
2015/04/10 Javascript
jquery.fastLiveFilter.js实现输入自动过滤的方法
2015/08/11 Javascript
JavaScript实现上下浮动的窗口效果代码
2015/10/12 Javascript
详解JavaScript对象和数组
2015/12/03 Javascript
深入理解vue.js双向绑定的实现原理
2016/12/05 Javascript
微信小程序返回箭头跳转到指定页面实例解析
2019/10/08 Javascript
jQuery实现鼠标滑动切换图片
2020/05/27 jQuery
[48:32]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python复制目录结构脚本代码分享
2015/03/06 Python
Python 最大概率法进行汉语切分的方法
2018/12/14 Python
Python多进程fork()函数详解
2019/02/22 Python
python地震数据可视化详解
2019/06/18 Python
pytorch中如何使用DataLoader对数据集进行批处理的方法
2019/08/06 Python
Django之路由层的实现
2019/09/09 Python
python中导入 train_test_split提示错误的解决
2020/06/19 Python
python的setattr函数实例用法
2020/12/16 Python
8款精美的CSS3表单设计(登录表单/下拉选择/按钮附演示及源码)
2013/02/04 HTML / CSS
选购国际女性时装设计师品牌:IFCHIC(支持中文)
2018/04/12 全球购物
大学生求职简历的自我评价范文
2013/10/12 职场文书
安全生产管理合理化建议书
2014/03/12 职场文书
关爱残疾人标语
2014/06/25 职场文书
村级个人对照检查材料
2014/08/22 职场文书
2014年监理工作总结范文
2014/11/17 职场文书
2016年寒假社会实践活动总结
2015/03/27 职场文书
写给同事的离职感言
2015/08/04 职场文书
2016学校先进党组织事迹材料
2016/02/29 职场文书
Mysql数据库索引面试题(程序员基础技能)
2021/05/31 MySQL
什么是clearfix (一文搞清楚css清除浮动clearfix)
2023/05/21 HTML / CSS