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 相关文章推荐
压缩包密码破解示例分享(类似典破解)
Jan 17 Python
python定时器使用示例分享
Feb 16 Python
下载给定网页上图片的方法
Feb 18 Python
python实现简单socket通信的方法
Apr 19 Python
浅谈Pandas 排序之后索引的问题
Jun 07 Python
在pandas多重索引multiIndex中选定指定索引的行方法
Nov 16 Python
让你Python到很爽的加速递归函数的装饰器
May 26 Python
Python3 串口接收与发送16进制数据包的实例
Jun 12 Python
用Python从0开始实现一个中文拼音输入法的思路详解
Jul 20 Python
关于Python 常用获取元素 Driver 总结
Nov 24 Python
Python阶乘求和的代码详解
Feb 14 Python
python实现在线翻译
Jun 18 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
fleaphp crud操作之findByField函数的使用方法
2011/04/23 PHP
PHP5.3与5.5废弃与过期函数整理汇总
2014/07/10 PHP
php使用cookie实现记住登录状态
2015/04/27 PHP
PHP类的特性实例分析
2016/09/28 PHP
PHP实现SMTP邮件的发送实例
2018/09/27 PHP
juqery 学习之五 文档处理 插入
2011/02/11 Javascript
jQuery动态添加的元素绑定事件处理函数代码
2011/08/02 Javascript
基于JavaScript操作DOM常用的API小结
2015/12/01 Javascript
jQuery progressbar通过Ajax请求实现后台进度实时功能
2016/10/11 Javascript
老生常谈的跨域处理
2017/01/11 Javascript
微信小程序中实现一对多发消息详解及实例代码
2017/02/14 Javascript
Angular 4.x 路由快速入门学习
2017/05/03 Javascript
AngularJS中使用three.js的实例详解
2017/07/21 Javascript
react-redux中connect的装饰器用法@connect详解
2018/01/13 Javascript
基于vue 开发中出现警告问题去除方法
2018/01/25 Javascript
vue 中动态绑定class 和 style的方法代码详解
2018/06/01 Javascript
深入学习JavaScript 高阶函数
2019/06/11 Javascript
解决layui调用自定义方法提示未定义的问题
2019/09/14 Javascript
jQuery利用cookie 实现本地收藏功能(不重复无需多次命名)
2019/11/07 jQuery
Vue实现腾讯云点播视频上传功能的实现代码
2020/08/17 Javascript
Python判断字符串与大小写转换
2015/06/08 Python
Numpy截取指定范围内的数据方法
2018/11/14 Python
Python利用scapy实现ARP欺骗的方法
2019/07/23 Python
Django缓存系统实现过程解析
2019/08/02 Python
python实现磁盘日志清理的示例
2020/11/05 Python
什么叫应用程序域?什么是托管代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?CTS、CLS和CLR分别作何解释?
2012/05/23 面试题
如何用Python来进行查询和替换一个文本字符串
2014/01/02 面试题
如何定义一个可复用的服务
2014/09/30 面试题
机电工程专业应届生求职信
2013/10/03 职场文书
师恩难忘教学反思
2014/04/27 职场文书
踏青活动策划方案
2014/08/19 职场文书
医院领导班子四风问题对照检查材料
2014/10/26 职场文书
高考诚信考试承诺书
2015/04/29 职场文书
论语读书笔记
2015/06/26 职场文书
MySQL开启事务的方式
2021/06/26 MySQL
Python if else条件语句形式详解
2022/03/24 Python