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的设计模式编程入门指南
Apr 02 Python
python 写的一个爬虫程序源码
Feb 28 Python
理论讲解python多进程并发编程
Feb 09 Python
为什么入门大数据选择Python而不是Java?
Mar 07 Python
Python字典中的键映射多个值的方法(列表或者集合)
Oct 17 Python
PyQt5实现让QScrollArea支持鼠标拖动的操作方法
Jun 19 Python
ORM Django 终端打印 SQL 语句实现解析
Aug 09 Python
Python FtpLib模块应用操作详解
Dec 12 Python
python绘制玫瑰的实现代码
Mar 02 Python
Jupyter 无法下载文件夹如何实现曲线救国
Apr 22 Python
Python docutils文档编译过程方法解析
Jun 23 Python
深入浅析pycharm中 Make available to all projects的含义
Sep 15 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 curl库实现整站克隆功能
2015/02/12 PHP
支付宝接口开发集成支付环境小结
2015/03/17 PHP
一段利用WSH修改和查看IP配置的代码
2008/05/11 Javascript
15个款优秀的 jQuery 图片特效插件推荐
2011/11/21 Javascript
javascript重复绑定事件造成的后果说明
2013/03/02 Javascript
js兼容的placeholder属性详解
2013/08/18 Javascript
JS 如何获取radio选中后的值及不选择取radio的值
2013/10/28 Javascript
jQuery的load()方法及其回调函数用法实例
2015/03/25 Javascript
JavaScript显示表单内元素数量的方法
2015/04/02 Javascript
提高JavaScript执行效率的23个实用技巧
2017/03/01 Javascript
JavaScript错误处理和堆栈追踪详解
2017/04/18 Javascript
基于vue.js的分页插件详解
2017/11/27 Javascript
vue组件实现弹出框点击显示隐藏效果
2020/10/26 Javascript
vue动态设置img的src路径实例
2018/09/18 Javascript
JS桶排序的简单理解与实现方法示例
2019/11/25 Javascript
vue-cli创建的项目中的gitHooks原理解析
2020/02/14 Javascript
Handtrack.js库实现实时监测手部运动(推荐)
2021/02/08 Javascript
用javascript实现倒计时效果
2021/02/09 Javascript
编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法
2016/01/20 Python
python实现蒙特卡罗方法教程
2019/01/28 Python
Scrapy框架爬取Boss直聘网Python职位信息的源码
2019/02/22 Python
python学习开发mock接口
2019/04/28 Python
Python scrapy增量爬取实例及实现过程解析
2019/12/24 Python
清除canvas画布内容(点擦除+线擦除)
2020/08/12 HTML / CSS
英国家喻户晓的折扣商场:TK Maxx
2017/05/26 全球购物
客服实习的个人自我鉴定
2013/10/20 职场文书
生产经理的自我评价分享
2013/11/07 职场文书
自我反省检讨书
2014/01/23 职场文书
光盘行动倡议书
2014/02/02 职场文书
《学棋》教后反思
2014/04/14 职场文书
上课说话检讨书
2015/01/27 职场文书
不同意离婚上诉状
2015/05/23 职场文书
英语专业毕业论文答辩开场白
2015/05/27 职场文书
初中毕业生感言
2015/07/31 职场文书
结婚幸福感言
2015/08/01 职场文书
2016中秋节广告语
2016/01/28 职场文书