python的Template

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

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

from string import Template

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

  1. 它的主要实现方式为$xxx,其中xxx是满足python命名规则的字符串,即不能以数字开头,不能为关键字等
  2. 如果$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()


参考资料:https://docs.python.org/2/library/string.html#template-strings

时间: 2024-10-28 15:39:50

python的Template的相关文章

python的Template使用指南

本文主要讲解了python中Template使用方法以及使用技巧,非常实用,有需要的朋友可以参考下: Template无疑是一个好东西,可以将字符串的格式固定下来,重复利用.同时Template也可以让开发人员可以分别考虑字符串的格式和其内容了,无形中减轻了开发人员的压力. Template属于string中的一个类,所以要使用的话可以用以下方式调用 1 from string import Template Template有个特殊标示符$,它具有以下的规则: 它的主要实现方式为$xxx,其中

python Template中substitute()的使用

在python中Template可以将字符串的格式固定下来,重复利用. Template属于string中的一个类,要使用他的话可以用以下方式调用: from string import Template 我们使用以下代码: >>> s = Template('There ${moneyType} is ${money}') >>> print s.substitute(moneyType = 'Dollar',money=12) 运行结果显示“There  Dolla

2015/8/31 Python基础(5):字符串

字符串是Python最常见的一种类型.通过在引号间包含字符的方式创建它.Python里单双引号的作用是一致的.Python的对象类型里不存在字符型,一般用单个字符的字符串来使用.Python的字符串是一种直接量或者说标量,Python解释器在处理字符串时把它作为单一值并且不会包含其他Python类型的.Python的字符串也是不可改变类型.字符串里的字符可以通过切片操作访问.Python有3类字符串,通常意义字符串(str),Unicode字符串(unicode)和抽象类字符串(basestri

python中常用的函数与库一

1, collections.deque 在python里如果我们用列表作为队列使用也是可以的,只是当从队尾删除或者增加元素的时候是很快的,但是从队首删除或者增加元素则要慢得多,这是因为在队首进行操作其他的元素都要逐一改变. collections.deque就是为队列设计的,它能迅速得删除或者增加元素,无论是队首还是队尾 >>> from collections import deque >>> queue = deque(["Eric", &qu

python简单爬虫定时推送同花顺直播及荐股至邮箱

1.初衷:实践 2.技术:python requests Template 3.思路:根据直播页面获取评价最高的前十博主,定时爬行最新的消息和实战股票 4.思路:python 编辑简单邮件html模板 5.难点:邮件html模板的设计,还需要邮箱支持 爬虫文件 '''-- #coding:utf-8import requestsfrom lxml import etreefrom sendmail import sendmailimport sys, timefrom string import

使用Python生成源文件的两种方法

利用Python的字符串处理模块,开发者能够编写脚本用来生成那些格式同样的C.C++.JAVA源程序.头文件和測试文件,从而避免大量的反复工作. 本文概述两种利用Python string类生成java源码的方法. 1.String Template Template是一个好东西,能够将字符串的格式固定下来,反复利用.Template也能够让开发者能够分别考虑字符串的格式和其内容了.无形中减轻了开发者的压力. Template属于string中的一个类,有两个重要的方法:substitute和s

Python&Selenium&Unittest&BeautifuReport 自动化测试并生成HTML自动化测试报告

一.摘要 本篇博文将介绍如何借助BeautifulReport和HTML模版,生成HTML测试报告的BeautifulReport 源码Clone地址为 https://github.com/TesterlifeRaymond/BeautifulReport,其中 BeautifulReport.py和其template是我们需要的关键. 二.BeautifulReport 如下代码是BeautifulReport.py的源码,其中几个注释的地方需要注意,将其集成进自己的自动化框架时需要做相应的

Docker packaging guide for Python

以下是一些关于python 集成docker 的文章,很不错 The basics Broken by default: why you should avoid most Dockerfile examplesMost Dockerfile examples you’ll find on the Web are broken. And that’s a problem. A review of the official Dockerfile best practices: good, bad,

odoo 怎样在模块中设置python 三方包

在__manifest__.py中添加键值对: 'external_dependencies': { 'python': ['py3o.template', 'py3o.formats', 'PyPDF2'] }, 原文地址:https://www.cnblogs.com/qianxunman/p/12586748.html