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抓取京东图书评论数据
Aug 31 Python
完美解决Python2操作中文名文件乱码的问题
Jan 04 Python
python实现多进程代码示例
Oct 31 Python
pytorch 调整某一维度数据顺序的方法
Dec 08 Python
Python中一般处理中文的几种方法
Mar 06 Python
python 定义类时,实现内部方法的互相调用
Dec 25 Python
django有外键关系的两张表如何相互查找
Feb 10 Python
Pytorch实现将模型的所有参数的梯度清0
Jun 24 Python
浅谈keras 模型用于预测时的注意事项
Jun 27 Python
基于python tkinter的点名小程序功能的实例代码
Aug 22 Python
Python实现哲学家就餐问题实例代码
Nov 09 Python
pytorch 计算Parameter和FLOP的操作
Mar 04 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中函数内引用全局变量的方法
2008/10/20 PHP
php define的第二个参数使用方法
2013/11/04 PHP
thinkphp如何获取客户端IP
2015/11/03 PHP
php字符集转换
2017/01/23 PHP
javascript String 对象
2008/04/25 Javascript
extjs 学习笔记(一) 一些基础知识
2009/10/13 Javascript
jquery仿京东导航/仿淘宝商城左侧分类导航下拉菜单效果
2013/04/24 Javascript
JavaScript 事件绑定及深入
2015/04/13 Javascript
Nodejs实现批量下载妹纸图
2015/05/28 NodeJs
整理Javascript基础语法学习笔记
2015/11/29 Javascript
灵活使用数组制作图片切换js实现
2016/07/28 Javascript
js实现颜色阶梯渐变效果(Gradient算法)
2017/03/21 Javascript
JS简单获取当前日期时间的方法(如:2017-03-29 11:41:10 星期四)
2017/03/29 Javascript
JS中正则表达式全局匹配模式 /g用法详解
2017/04/01 Javascript
前端构建工具之gulp的配置与搭建详解
2017/06/12 Javascript
bootstrap confirmation按钮提示组件使用详解
2017/08/22 Javascript
Vue Echarts实现可视化世界地图代码实例
2019/05/07 Javascript
vue-dplayer 视频播放器实例代码
2019/11/08 Javascript
ES6 Object.assign()的用法及其使用
2020/01/18 Javascript
使用vue实现HTML页面生成图片的方法
2020/03/12 Javascript
python实现博客文章爬虫示例
2014/02/26 Python
Python 处理数据的实例详解
2017/08/10 Python
Flask框架实现给视图函数增加装饰器操作示例
2018/07/16 Python
基于python if 判断选择结构的实例详解
2019/05/06 Python
Python实现生成密码字典的方法示例
2019/09/02 Python
将labelme格式数据转化为标准的coco数据集格式方式
2020/02/17 Python
python 实现在shell窗口中编写print不向屏幕输出
2020/02/19 Python
浅谈多卡服务器下隐藏部分 GPU 和 TensorFlow 的显存使用设置
2020/06/30 Python
Django路由层URLconf作用及原理解析
2020/09/24 Python
python实现银行账户系统
2021/02/22 Python
HTML5+CSS3实例 :canvas 模拟实现电子彩票刮刮乐代码
2016/12/30 HTML / CSS
在HTML5 Canvas中放入图片和保存为图片的方法
2014/05/03 HTML / CSS
Space NK美国站:英国高端美妆护肤商城
2017/05/22 全球购物
电工技术比武方案
2014/05/11 职场文书
保险公司反洗钱宣传活动总结
2015/05/08 职场文书
铁人纪念馆观后感
2015/06/16 职场文书