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每隔N秒运行指定函数的方法
Mar 16 Python
python求解水仙花数的方法
May 11 Python
常用python编程模板汇总
Feb 12 Python
对Python中DataFrame选择某列值为XX的行实例详解
Jan 29 Python
PyQt5 对图片进行缩放的实例
Jun 18 Python
Pandas之MultiIndex对象的示例详解
Jun 25 Python
docker django无法访问redis容器的解决方法
Aug 21 Python
Python使用ElementTree美化XML格式的操作
Mar 06 Python
Python xlrd模块导入过程及常用操作
Jun 10 Python
基于SQLAlchemy实现操作MySQL并执行原生sql语句
Jun 10 Python
Python提取视频中图片的示例(按帧、按秒)
Oct 22 Python
Python 数据可视化工具 Pyecharts 安装及应用
Apr 20 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函数指定默认值方法的小例子
2013/12/04 PHP
ThinkPHP中url隐藏入口文件后接收alipay传值的方法
2014/12/09 PHP
Linux系统中为php添加pcntl扩展
2016/08/28 PHP
PHP使用curl_multi实现并发请求的方法示例
2018/04/29 PHP
javascript操作文本框readOnly
2007/05/15 Javascript
jquery多选项卡效果实例代码(附效果图)
2013/03/23 Javascript
JS验证身份证有效性示例
2013/10/11 Javascript
jQuery中Ajax的get、post等方法详解
2015/01/20 Javascript
javascript HTML+CSS实现经典橙色导航菜单
2016/02/16 Javascript
JQuery EasyUI学习教程之datagrid 添加、修改、删除操作
2016/07/09 Javascript
Angular 常用指令实例总结整理
2016/12/13 Javascript
jQuery基本选择器和层次选择器学习使用
2017/02/27 Javascript
JS jQuery使用正则表达式去空字符的简单实现代码
2017/05/20 jQuery
详解vue2 $watch要注意的问题
2017/09/08 Javascript
VeeValidate在vue项目里表单校验应用案例
2018/05/09 Javascript
解决在vue项目中webpack打包后字体不生效的问题
2018/09/01 Javascript
基于JS实现前端压缩上传图片的实例代码
2019/05/14 Javascript
Typescript的三种运行方式(小结)
2019/09/18 Javascript
javascript实现超好看的3D烟花特效
2020/01/01 Javascript
Jquery cookie插件实现原理代码解析
2020/08/04 jQuery
vue-cli+webpack项目打包到服务器后,ttf字体找不到的解决操作
2020/08/28 Javascript
在Linux下调试Python代码的各种方法
2015/04/17 Python
Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)
2016/11/16 Python
Python模拟脉冲星伪信号频率实例代码
2018/01/03 Python
python 中字典嵌套列表的方法
2018/07/03 Python
浅谈python之新式类
2018/08/12 Python
python实现文件的分割与合并
2019/08/29 Python
HTML5地理定位实例
2014/10/15 HTML / CSS
洛杉矶时尚女装系列:J.ING US
2019/03/17 全球购物
机电一体化自荐信
2013/12/10 职场文书
银行职业规划书范文
2013/12/28 职场文书
工作表现自我评价
2014/02/08 职场文书
简单租房协议书
2014/04/09 职场文书
企业开业庆典答谢词
2015/01/20 职场文书
干部作风纪律整顿心得体会
2016/01/23 职场文书
2016年感恩教师节活动总结
2016/04/01 职场文书