python的Template使用指南


Posted in Python onSeptember 11, 2014

Template无疑是一个好东西,可以将字符串的格式固定下来,重复利用。同时Template也可以让开发人员可以分别考虑字符串的格式和其内容了,无形中减轻了开发人员的压力。

Template属于string中的一个类,所以要使用的话可以用以下方式调用

from string import Template

Template有个特殊标示符$,它具有以下的规则:

它的主要实现方式为$xxx,其中xxx是满足python命名规则的字符串,即不能以数字开头,不能为关键字等

如果$xxx需要和其他字符串接触时,可用{}将xxx包裹起来(以前似乎使用'()',我的一本参考书上是这样写的,但是现在的版本应该只能使用'{}')。例如,aaa${xxx}aaa

Template中有两个重要的方法:substitute和safe_substitute.

这两个方法都可以通过获取参数返回字符串

>>s=Template(There $a and $b)
>>print s.subtitute(a='apple',b='banana')
There apple and banana
>>print s.safe_substitute(a='apple',b='banbana')
There apple and banbana

还可以通过获取字典直接传递数据,像这样

>>s=Template(There $a and $b)
>>d={'a':'apple','b':'banbana'}
>>print s.substitute(d)
There apple and banbana

它们之间的差别在于对于参数缺少时的处理方式。

Template的实现方式是首先通过Template初始化一个字符串。这些字符串中包含了一个个key。通过调用substitute或safe_subsititute,将key值与方法中传递过来的参数对应上,从而实现在指定的位置导入字符串。这个方式的一个好处是不用像print ‘%s'之类的方式,各个参数的顺序必须固定,只要key是正确的,值就能正确插入。通过这种方式,在插入很多数据的时候就可以松口气了。可是即使有这样偷懒的方法,依旧不能保证不出错,如果key少输入了一个怎么办呢?

substitute是一个严肃的方法,如果有key没有输入,那就一定会报错。虽然会很难看,但是可以发现问题。

safe_substitute则不会报错,而是将$xxx直接输入到结果字符串中,如

there apple and $b

这样的好处是程序总是对的,不用被一个个错误搞得焦头烂额。

Template可以被继承,它的子类可以进行一些‘个性化'操作...

通过修改delimiter字段可以将$字符改变为其他字符,如“#”,不过新的标示符需要符合正则表达式的规范。

通过修改idpattern可以修改key的命名规则,比如说规定第一个字符开头必须是a,这对规范命名倒是很有好处。当然,这也是通过正则表示实现的。

from string import Template
class MyTemplate(Template):
  delimiter = "#"
  idpattern = "[a][_a-z0-9]*"
def test():
  s='#aa is not #ab'
  t=MyTemplate(s)
  d={'aa':'apple','ab':'banbana'}
  print t.substitute(d)
if __name__=='__main__':
  test()
Python 相关文章推荐
python的描述符(descriptor)、装饰器(property)造成的一个无限递归问题分享
Jul 09 Python
详解Django中的过滤器
Jul 16 Python
基于Django contrib Comments 评论模块(详解)
Dec 08 Python
网红编程语言Python将纳入高考你怎么看?
Jun 07 Python
详解python3中tkinter知识点
Jun 21 Python
python和pygame实现简单俄罗斯方块游戏
Feb 19 Python
python模拟实现斗地主发牌
Jan 07 Python
Selenium 配置启动项参数的方法
Dec 04 Python
python Zmail模块简介与使用示例
Dec 19 Python
No module named ‘win32gui‘ 的解决方法(踩坑之旅)
Feb 18 Python
写一个Python脚本下载哔哩哔哩舞蹈区的所有视频
May 31 Python
Python代码风格与编程习惯重要吗?
Jun 03 Python
Python基础之函数用法实例详解
Sep 10 #Python
Python迭代用法实例教程
Sep 08 #Python
Python切片用法实例教程
Sep 08 #Python
Python常用模块用法分析
Sep 08 #Python
python实现斐波那契递归函数的方法
Sep 08 #Python
Python内置函数的用法实例教程
Sep 08 #Python
Python中函数的用法实例教程
Sep 08 #Python
You might like
PHP与MySQL开发中页面出现乱码的一种解决方法
2007/07/29 PHP
php采集时被封ip的解决方法
2010/08/29 PHP
php中将时间差转换为字符串提示的实现代码
2011/08/08 PHP
PHP设计模式之工厂模式与单例模式
2016/09/28 PHP
Bootstrap每天必学之下拉菜单
2015/11/25 Javascript
jQuery ajax时间差导致的变量赋值问题分析
2016/01/22 Javascript
基于JavaScript实现类似于百度学术高级检索功能
2016/03/02 Javascript
jQuery事件处理的特征(事件命名机制)
2016/08/23 Javascript
Bootstrap CSS布局之列表
2016/12/15 Javascript
JS获取子、父、兄节点方法小结
2017/08/14 Javascript
Vue无限滑动周选择日期的组件的示例代码
2018/07/18 Javascript
在vue-cli的组件模板里使用font-awesome的两种方法
2018/09/28 Javascript
详解使用JWT实现单点登录(完全跨域方案)
2019/08/02 Javascript
JS forEach跳出循环2种实现方法
2020/06/24 Javascript
[02:44]DOTA2英雄基础教程 克林克兹
2014/01/15 DOTA
详解Python中的条件判断语句
2015/05/14 Python
Python面向对象程序设计示例小结
2019/01/30 Python
Python文件打开方式实例详解【a、a+、r+、w+区别】
2019/03/30 Python
Python/Django后端使用PIL Image生成头像缩略图
2019/04/30 Python
Python实现多态、协议和鸭子类型的代码详解
2019/05/05 Python
Python Web版语音合成实例详解
2019/07/16 Python
Django框架反向解析操作详解
2019/11/28 Python
Python和Sublime整合过程图示
2019/12/25 Python
Keras 加载已经训练好的模型进行预测操作
2020/06/17 Python
python3爬虫GIL修改多线程实例讲解
2020/11/24 Python
html5实现图片转圈的动画效果——让页面动起来
2017/10/16 HTML / CSS
中国最大隐形眼镜网上商城:视客眼镜网
2016/10/30 全球购物
美国瑜伽服装和装备购物网站:Mukha Yoga
2019/02/22 全球购物
linux面试题参考答案(6)
2016/06/23 面试题
师范生个人推荐信
2013/11/29 职场文书
怎样写好自荐信和推荐信
2013/12/26 职场文书
2014年残联工作总结
2014/11/21 职场文书
2014年中职班主任工作总结
2014/12/16 职场文书
教师工作态度自我评价
2015/03/05 职场文书
解决redis sentinel 频繁主备切换的问题
2021/04/12 Redis
Apache Linkis 中间件架构及快速安装步骤
2022/03/16 Servers