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模块学习 datetime介绍
Aug 27 Python
将Python的Django框架与认证系统整合的方法
Jul 24 Python
Windows上使用virtualenv搭建Python+Flask开发环境
Jun 07 Python
Python图形绘制操作之正弦曲线实现方法分析
Dec 25 Python
解决python使用open打开文件中文乱码的问题
Dec 29 Python
Python迭代器与生成器基本用法分析
Jul 26 Python
python找出因数与质因数的方法
Jul 25 Python
pymysql模块的操作实例
Dec 17 Python
python线程join方法原理解析
Feb 11 Python
python GUI库图形界面开发之PyQt5输入对话框QInputDialog详细使用方法与实例
Feb 27 Python
Python爬虫实现百度翻译功能过程详解
May 29 Python
用python实现一个简单计算器(完整DEMO)
Oct 14 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 开源框架22个简单简介
2009/08/24 PHP
百度实时推送api接口应用示例
2014/10/21 PHP
PHP扩展框架之Yaf框架的安装与使用
2016/05/18 PHP
PHP实现数据库的增删查改功能及完整代码
2018/04/18 PHP
PHP 7.4 新语法之箭头函数实例详解
2019/05/09 PHP
对YUI扩展的Gird组件 Part-2
2007/03/10 Javascript
判断多个元素(RADIO,CHECKBOX等)是否被选择的原理说明
2009/02/18 Javascript
Package.js  现代化的JavaScript项目make工具
2012/05/23 Javascript
JQuery AJAX 中文乱码问题解决
2013/06/05 Javascript
jquery模拟LCD 时钟的html文件源代码
2014/06/16 Javascript
JavaScript实现的双向跨域插件分享
2015/01/31 Javascript
Nodejs关于gzip/deflate压缩详解
2015/03/04 NodeJs
asp.net中oracle 存储过程(图文)
2015/08/12 Javascript
JS实现淘宝支付宝网站的控制台菜单效果
2015/09/28 Javascript
easyui简介_动力节点Java学院整理
2017/07/14 Javascript
JavaScript选取(picking)和反选(rejecting)对象的属性方法
2017/08/16 Javascript
angularjs $http调用接口的方式详解
2018/08/13 Javascript
手把手教你如何使用nodejs编写cli命令行
2018/11/05 NodeJs
Vue中使用create-keyframe-animation与动画钩子完成复杂动画
2019/04/09 Javascript
JS中锚点链接点击平滑滚动并自由调整到顶部位置
2021/02/06 Javascript
python绘制立方体的方法
2018/07/02 Python
pandas通过loc生成新的列方法
2018/11/28 Python
对python3新增的byte类型详解
2018/12/04 Python
Python如何使用argparse模块处理命令行参数
2019/12/11 Python
Keras中 ImageDataGenerator函数的参数用法
2020/07/03 Python
Python的信号库Blinker用法详解
2020/12/31 Python
CSS3 transform的skew属性值图文详解
2014/07/21 HTML / CSS
大众服装店创业计划书范文
2014/01/01 职场文书
贸易跟单员英文求职信
2014/04/19 职场文书
购房意向书
2014/08/30 职场文书
平安家庭事迹材料
2014/12/20 职场文书
大学毕业生自我评价
2015/03/02 职场文书
学生退学证明
2015/06/23 职场文书
关于python中模块和重载的问题
2021/11/02 Python
Python 详解通过Scrapy框架实现爬取CSDN全站热榜标题热词流程
2021/11/11 Python
排查并解决MySQL生产库内存使用率高的报警
2022/04/11 MySQL