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+mysql实现简单的web程序
Sep 11 Python
在Python的Flask中使用WTForms表单框架的基础教程
Jun 07 Python
Python面向对象之继承代码详解
Jan 29 Python
PyQt4实现下拉菜单可供选择并打印出来
Apr 20 Python
linux安装Python3.4.2的操作方法
Sep 28 Python
Python判断对象是否相等及eq函数的讲解
Feb 25 Python
Python3 批量扫描端口的例子
Jul 25 Python
Python实现快速排序的方法详解
Oct 25 Python
Python制作简易版小工具之计算天数的实现思路
Feb 13 Python
什么是Python中的匿名函数
Jun 02 Python
使用Python Tkinter实现剪刀石头布小游戏功能
Oct 23 Python
手把手教你实现PyTorch的MNIST数据集
Jun 28 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程序
2006/10/09 PHP
PHP+FLASH实现上传文件进度条相关文件 下载
2007/07/21 PHP
php替换超长文本中的特殊字符的函数代码
2012/05/22 PHP
PHP实现通过二维数组键值获取一维键名操作示例
2019/10/11 PHP
PHP学习记录之常用的魔术常量详解
2019/12/12 PHP
javascript操作cookie_获取与修改代码
2009/05/21 Javascript
jquery提交form表单简单示例分享
2014/03/03 Javascript
JavaScript获取表单内所有元素值的方法
2015/04/02 Javascript
JS简单实现城市二级联动选择插件的方法
2015/08/19 Javascript
jQuery实现带有洗牌效果的动画分页实例
2015/08/31 Javascript
JavaScript类型系统之正则表达式
2016/01/05 Javascript
js基于cookie方式记住返回页面用法示例
2016/05/27 Javascript
使用 bootstrap modal遇到的问题小结
2016/11/09 Javascript
JS简单实现数组去重的方法示例
2017/03/27 Javascript
Vue2.x中的父子组件相互通信的实现方法
2017/05/02 Javascript
关于Angularjs中自定义指令一些有价值的细节和技巧小结
2018/04/22 Javascript
swiper 自动图片无限轮播实现代码
2018/05/21 Javascript
angularjs自定义过滤器demo示例
2019/08/24 Javascript
js实现GIF动图分解成多帧图片上传
2019/10/24 Javascript
JS正则表达式常见函数与用法小结
2020/04/13 Javascript
vue+高德地图实现地图搜索及点击定位操作
2020/09/09 Javascript
基于Python实现的ID3决策树功能示例
2018/01/02 Python
Python编程argparse入门浅析
2018/02/07 Python
Django项目中model的数据处理以及页面交互方法
2018/05/30 Python
解决Python找不到ssl模块问题 No module named _ssl的方法
2019/04/29 Python
pandas条件组合筛选和按范围筛选的示例代码
2019/08/26 Python
口腔工艺技术专业毕业生自荐信
2013/09/27 职场文书
自行车租赁公司创业计划书
2014/01/28 职场文书
大班开学家长寄语
2014/04/04 职场文书
《冬阳童年骆驼队》教学反思
2014/04/15 职场文书
奥巴马经典演讲稿
2014/09/13 职场文书
python 如何用map()函数创建多线程任务
2021/04/07 Python
python3 hdf5文件 遍历代码
2021/05/19 Python
详解python字符串驻留技术
2021/05/21 Python
SpringBoot读取Resource下文件的4种方法
2021/07/02 Java/Android
Python如何用re模块实现简易tokenizer
2022/05/02 Python