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对数据库操作
Mar 28 Python
Python队列的定义与使用方法示例
Jun 24 Python
Python实现自动上京东抢手机
Feb 06 Python
python使用生成器实现可迭代对象
Mar 20 Python
python机器学习之随机森林(七)
Mar 26 Python
python实现随机梯度下降法
Mar 24 Python
利用python循环创建多个文件的方法
Oct 25 Python
python实现对输入的密文加密
Mar 20 Python
十行代码使用Python写一个USB病毒
Jun 21 Python
python爬虫 execjs安装配置及使用
Jul 30 Python
Django 创建后台,配置sqlite3教程
Nov 18 Python
使用PyTorch将文件夹下的图片分为训练集和验证集实例
Jan 08 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修改指定文件后缀的方法
2014/09/11 PHP
php中注册器模式类用法实例分析
2015/11/03 PHP
jquery刷新页面的实现代码(局部及全页面刷新)
2011/07/11 Javascript
25个非常棒的jQuery滑块插件和教程小结
2011/09/02 Javascript
js展开闭合效果演示代码
2013/07/24 Javascript
JQuery的自定义事件代码,触发,绑定简单实例
2013/08/01 Javascript
JS实现时间格式化的方式汇总
2013/10/16 Javascript
jquery给图片添加鼠标经过时的边框效果
2013/11/12 Javascript
JS+CSS 制作的超级简单的下拉菜单附图
2013/11/22 Javascript
node.js中的fs.fsyncSync方法使用说明
2014/12/15 Javascript
JavaScript实现同一页面内两个表单互相传值的方法
2015/08/12 Javascript
纯css实现窗户玻璃雨滴逼真效果
2015/08/23 Javascript
JavaScript中的操作符类型转换示例总结
2016/05/30 Javascript
文本框只能输入数字的js代码(含小数点)
2016/07/10 Javascript
Angular设置title信息解决SEO方面存在问题
2016/08/19 Javascript
vue.js表格分页示例
2016/10/18 Javascript
BootStrap 模态框实现刷新网页并关闭功能
2017/01/04 Javascript
BootStrap 图片样式、辅助类样式和CSS组件的实例详解
2017/01/20 Javascript
Layui组件Table绑定行点击事件和获取行数据的方法
2018/08/19 Javascript
微信小程序使用Vant Weapp组件库的方法步骤
2019/08/01 Javascript
js函数柯里化的方法和作用实例分析
2020/04/11 Javascript
浅谈JavaScript中等号、双等号、 三等号的区别
2020/08/06 Javascript
Python实现动态添加类的属性或成员函数的解决方法
2014/07/16 Python
Python3 Random模块代码详解
2017/12/04 Python
15行Python代码带你轻松理解令牌桶算法
2018/03/21 Python
django静态文件加载的方法
2018/05/20 Python
解决PySide+Python子线程更新UI线程的问题
2019/01/11 Python
PyCharm 设置SciView工具窗口的方法
2019/01/15 Python
html5 canvas 画图教程案例分析
2012/11/23 HTML / CSS
localstorage和sessionstorage使用记录(推荐)
2017/05/23 HTML / CSS
法国体育用品商店:GO Sport
2019/10/23 全球购物
员工考核评语大全
2014/04/26 职场文书
公司大门门卫岗位职责
2014/06/11 职场文书
党支部遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
学位证书委托书
2014/09/30 职场文书
Django展示可视化图表的多种方式
2021/04/08 Python