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 with statement 进行文件操作指南
Aug 22 Python
在Python中使用pngquant压缩png图片的教程
Apr 09 Python
pandas 空的dataframe 插入列名的示例
Oct 30 Python
python数据挖掘需要学的内容
Jun 23 Python
Python数据正态性检验实现过程
Apr 18 Python
解决python对齐错误的方法
Jul 16 Python
python闭包与引用以及需要注意的陷阱
Sep 18 Python
python 下载文件的多种方法汇总
Nov 17 Python
python更新数据库中某个字段的数据(方法详解)
Nov 18 Python
Numpy中的数组搜索中np.where方法详细介绍
Jan 08 Python
python自动生成sql语句的脚本
Feb 24 Python
Python 正则模块详情
Nov 02 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中读取和写入WORD文档的代码
2008/04/09 PHP
php去除html标记的原生函数详解
2015/01/27 PHP
必须收藏的php实用代码片段
2016/02/02 PHP
addEventListener()第三个参数useCapture (Boolean)详细解析
2013/11/07 Javascript
jquery实现文本框数量加减功能的例子分享
2014/05/10 Javascript
鼠标移到图片上变大显示而不是放大镜效果
2014/06/15 Javascript
Node.js中的模块机制学习笔记
2014/11/04 Javascript
JS实现选中当前菜单后高亮显示的导航条效果
2015/10/15 Javascript
jQuery使用经验小技巧(推荐)
2016/05/31 Javascript
AngularJS过滤器filter用法分析
2016/12/11 Javascript
Angular.js实现动态加载组件详解
2017/05/28 Javascript
Angular在模板驱动表单中自定义校验器的方法
2017/08/09 Javascript
jQuery事件对象的属性和方法详解
2017/09/09 jQuery
vue项目base64字符串转图片的实现代码
2018/07/13 Javascript
jquery获取并修改触发事件的DOM元素示例【基于target 属性】
2019/10/10 jQuery
基于form-data请求格式详解
2019/10/29 Javascript
javascript的delete运算符知识点总结
2019/11/19 Javascript
Openlayers实现测量功能
2020/09/25 Javascript
python实现2014火车票查询代码分享
2014/01/10 Python
浅谈python连续赋值可能引发的错误
2018/11/10 Python
Python中is和==的区别详解
2018/11/15 Python
在win10和linux上分别安装Python虚拟环境的方法步骤
2019/05/09 Python
教你如何编写、保存与运行Python程序的方法
2019/07/12 Python
Python使用正则实现计算字符串算式
2019/12/29 Python
Python argparse模块使用方法解析
2020/02/20 Python
Matplotlib自定义坐标轴刻度的实现示例
2020/06/18 Python
PyTorch安装与基本使用详解
2020/08/31 Python
html5 canvas里绘制椭圆并保持线条粗细均匀的技巧
2013/03/25 HTML / CSS
大学生学习2014年全国两会心得体会
2014/03/12 职场文书
小学生迎国庆演讲稿
2014/09/05 职场文书
银行给客户的感谢信
2015/01/23 职场文书
学校运动会简讯
2015/07/20 职场文书
使用numpy nonzero 找出非0元素
2021/05/14 Python
Python中glob库实现文件名的匹配
2021/06/18 Python
SQL试题 使用窗口函数选出连续3天登录的用户
2022/04/24 Oracle
Redis特殊数据类型HyperLogLog基数统计算法讲解
2022/06/01 Redis