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 示例分享---逻辑推理编程解决八皇后
Jul 20 Python
Python ldap实现登录实例代码
Sep 30 Python
详解Python文本操作相关模块
Jun 22 Python
详解python 拆包可迭代数据如tuple, list
Dec 29 Python
python引用(import)某个模块提示没找到对应模块的解决方法
Jan 19 Python
Python设计模式之装饰模式实例详解
Jan 21 Python
pyqt5 从本地选择图片 并显示在label上的实例
Jun 13 Python
python实现七段数码管和倒计时效果
Nov 23 Python
keras获得model中某一层的某一个Tensor的输出维度教程
Jan 24 Python
tensorflow模型转ncnn的操作方式
May 25 Python
Python+OpenCV检测灯光亮点的实现方法
Nov 02 Python
Anaconda的安装与虚拟环境建立
Nov 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
php array_flip() 删除数组重复元素
2009/01/14 PHP
php中mysql模块部分功能的简单封装
2011/09/30 PHP
ThinkPHP标签制作教程
2014/07/10 PHP
简单谈谈php中ob_flush和flush的区别
2014/11/27 PHP
asp.net和php的区别点总结
2019/10/10 PHP
Select标签下拉列表二级联动级联实例代码
2014/02/07 Javascript
javascript中的循环语句for语句深入理解
2014/04/04 Javascript
JS数组的遍历方式for循环与for...in
2014/07/31 Javascript
javascript实现确定和取消提示框效果
2015/07/10 Javascript
解析JavaScript中的字符串类型与字符编码支持
2016/06/24 Javascript
原生JavaScript来实现对dom元素class的操作方法(推荐)
2017/08/16 Javascript
深入理解ES7的async/await的用法
2017/09/09 Javascript
利用JavaScript的%做隔行换色的实例
2017/11/25 Javascript
对Vue beforeRouteEnter 的next执行时机详解
2018/08/25 Javascript
jQuery实现适用于移动端的跑马灯抽奖特效示例
2019/01/18 jQuery
jQuery实现条件搜索查询、实时取值及升降序排序的方法分析
2019/05/04 jQuery
解决vue+router路由跳转不起作用的一项原因
2020/07/19 Javascript
解决vue单页面多个组件嵌套监听浏览器窗口变化问题
2020/07/30 Javascript
TypeScript魔法堂之枚举的超实用手册
2020/10/29 Javascript
python实现划词翻译
2020/04/23 Python
python中bisect模块用法实例
2014/09/25 Python
介绍Python中的一些高级编程技巧
2015/04/02 Python
python中getaddrinfo()基本用法实例分析
2015/06/28 Python
浅谈Python的Django框架中的缓存控制
2015/07/24 Python
Python使用Paramiko模块编写脚本进行远程服务器操作
2016/05/05 Python
Python时间获取及转换知识汇总
2017/01/11 Python
今天 平安夜 Python 送你一顶圣诞帽 @微信官方
2017/12/25 Python
OpenCV2.3.1+Python2.7.3+Numpy等的配置解析
2018/01/05 Python
python实现蒙特卡罗方法教程
2019/01/28 Python
意大利珠宝店:Luxury Zone
2019/01/05 全球购物
怎样自定义一个异常类
2016/09/27 面试题
解除聘用合同证明书范本
2014/09/11 职场文书
趣味运动会通讯稿
2015/07/18 职场文书
学术会议领导致辞
2015/07/29 职场文书
社会实践心得体会范文
2016/01/14 职场文书
Python天气语音播报小助手
2021/09/25 Python