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 24 Python
python多进程共享变量
Apr 06 Python
Python 实现 贪吃蛇大作战 代码分享
Sep 07 Python
详解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和区别
Jun 23 Python
Python最小二乘法矩阵
Jan 02 Python
Python同步遍历多个列表的示例
Feb 19 Python
python实现名片管理系统项目
Apr 26 Python
Python单元测试与测试用例简析
Nov 09 Python
Django自带的加密算法及加密模块详解
Dec 03 Python
在python中利用try..except来代替if..else的用法
Dec 19 Python
python 弧度与角度互转实例
Apr 15 Python
利用 Python 的 Pandas和 NumPy 库来清理数据
Apr 13 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_unshift() 在数组开头插入一个或多个元素
2011/11/07 PHP
laravel model模型定义实现开启自动管理时间created_at,updated_at
2019/10/17 PHP
简单的JS多重继承示例
2008/03/13 Javascript
JavaScript 基于原型的对象(创建、调用)
2009/10/16 Javascript
JS+css 图片自动缩放自适应大小
2013/08/08 Javascript
jquerymobile局部渲染的各种刷新方法小结
2014/03/05 Javascript
jquery 扑捉回车键事件代码
2014/04/24 Javascript
Vue数据驱动模拟实现4
2017/01/12 Javascript
微信小程序 商城开发(ecshop )简单实例
2017/04/07 Javascript
JavaScript算法教程之sku(库存量单位)详解
2017/06/29 Javascript
js 发布订阅模式的实例讲解
2017/09/10 Javascript
jQuery实现的表格前端排序功能示例
2017/09/18 jQuery
React Native AsyncStorage本地存储工具类
2017/10/24 Javascript
浅谈webpack打包生成的bundle.js文件过大的问题
2018/02/22 Javascript
原生JS实现简单的倒计时功能示例
2018/08/30 Javascript
使用layui实现树形结构的方法
2019/09/20 Javascript
nodejs制作小爬虫功能示例
2020/02/24 NodeJs
JavaScript ECMA-262-3 深入解析(一):执行上下文实例分析
2020/04/25 Javascript
Python3基础教程之递归函数简单示例
2019/06/07 Python
python3 简单实现组合设计模式
2020/07/02 Python
英国家喻户晓的折扣商场:TK Maxx
2017/05/26 全球购物
家庭户外服装:Hawkshead
2017/11/02 全球购物
C#实现启动一个进程
2016/10/01 面试题
广告创意求职信
2014/03/17 职场文书
群众路线教育实践活动的心得体会
2014/09/03 职场文书
创新社会管理心得体会
2014/09/12 职场文书
2014年关工委工作总结
2014/11/17 职场文书
水电工岗位职责
2015/02/14 职场文书
企业工会工作总结2015
2015/05/13 职场文书
预备党员转正党小组意见
2015/06/01 职场文书
《学会看病》教学反思
2016/02/17 职场文书
2019中小学生安全过暑期倡议书
2019/06/24 职场文书
python学习之panda数据分析核心支持库
2021/05/07 Python
python执行js代码的方法
2021/05/13 Python
DIY胆机必读:各国电子管评价
2022/04/06 无线电
JavaScript实现一键复制内容剪贴板
2022/07/23 Javascript