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 相关文章推荐
Python3遍历目录树实现方法
May 22 Python
python虚拟环境virualenv的安装与使用
Dec 18 Python
基于Python实现的微信好友数据分析
Feb 26 Python
python的pygal模块绘制反正切函数图像方法
Jul 16 Python
python psutil模块使用方法解析
Aug 01 Python
详解python中的生成器、迭代器、闭包、装饰器
Aug 22 Python
python调用c++返回带成员指针的类指针实例
Dec 12 Python
python继承threading.Thread实现有返回值的子类实例
May 02 Python
python Gabor滤波器讲解
Oct 26 Python
Python实现异步IO的示例
Nov 05 Python
Python类class参数self原理解析
Nov 19 Python
Python 使用 Frame tkraise() 方法在 Tkinter 应用程序中的Frame之间切换
Apr 24 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/12/06 PHP
PHP获取和操作配置文件php.ini的几个函数介绍
2013/06/24 PHP
php去除字符串换行符示例分享
2014/02/13 PHP
smarty模板局部缓存方法使用示例
2014/06/17 PHP
ThinkPHP框架设计及扩展详解
2014/11/25 PHP
kindeditor 加入七牛云上传的实例讲解
2017/11/12 PHP
Laravel-添加后台模板AdminLte的实现方法
2019/10/08 PHP
快速保存网页中所有图片的方法
2006/06/23 Javascript
jquery easyui的tabs使用时的问题
2010/03/23 Javascript
ASP.NET jQuery 实例3 (在TextBox里面阻止复制、剪切和粘贴事件)
2012/01/13 Javascript
jquery插件之定时查询待处理任务数量
2014/05/01 Javascript
浅谈JS正则表达式的RegExp对象和括号的使用
2016/07/28 Javascript
js实现百度登录框鼠标拖拽效果
2017/03/07 Javascript
bootstrap如何让dropdown menu按钮式下拉框长度一致
2017/04/10 Javascript
原生js调用json方法总结
2018/02/22 Javascript
快速解决vue-cli不能初始化webpack模板的问题
2018/03/20 Javascript
jQuery实现的淡入淡出与滑入滑出效果示例
2018/04/18 jQuery
vue监听对象及对象属性问题
2018/08/20 Javascript
Javascript中弹窗confirm与prompt的区别
2018/10/26 Javascript
原生js 实现表单验证功能
2021/02/08 Javascript
Python使用reportlab将目录下所有的文本文件打印成pdf的方法
2015/05/20 Python
python实现随机梯度下降(SGD)
2020/03/24 Python
python生成1行四列全2矩阵的方法
2018/08/04 Python
JavaScript+Canvas实现自定义画板的示例代码
2019/05/13 HTML / CSS
美国大码时尚女装购物网站:ELOQUII
2017/12/28 全球购物
个人自荐信
2013/12/05 职场文书
函授毕业自我鉴定
2014/02/04 职场文书
应届毕业生应聘自荐信范文
2014/02/26 职场文书
公司法人授权委托书范本
2014/09/12 职场文书
拾金不昧感谢信
2015/01/21 职场文书
2015年秋季运动会前导词
2015/07/20 职场文书
Python入门之使用pandas分析excel数据
2021/05/12 Python
Python - 10行代码集2000张美女图
2021/05/23 Python
游戏《铁拳》动画化!2022年年内播出
2022/03/21 日漫
Redis 哨兵机制及配置实现
2022/03/25 Redis
微信小程序纯CSS实现无限弹幕滚动效果
2022/09/23 HTML / CSS