模板

字符串模板将作为内置的拼接语法的替代用法。使用Template拼接时,要在名字前加前缀$来标识变量(例如,$var)。或者,如果有必要区分变量和周围的文本,可以用大括号包围变量(例如,${var})。

import string

values = {'var':'foo'}

t = string.Template("""

Variable : $var

Escape : $$

Variable in text: ${var}iable

""")

print('TEMPLATE:', t.substitute(values))

s = """

Variable : %(var)s

Escape : %%

Variable in text: %(var)siable

"""

print('INTERPOLATION:', s % values)

S = """

Variable : {var}

Escape : {{}}

Variable in text: {var}iable

"""

print('FORMAT:', S.format(**values))

___________________输出____________________________

TEMPLATE:

Variable : foo

Escape : $

Variable in text: fooiable

INTERPOLATION:

Variable : foo

Escape : %

Variable in text: fooiable

FORMAT:

Variable : foo

Escape : {}

Variable in text: fooiable

前两种情况中,触发字符($和%)要重复两次来进行转义。在格式化语法中,需要重复{和}来进行转义。模板与字符串拼接或格式化的一个关键区别是,它不考虑参数的类型。值会转为字符串,再将字符串插入结果。这里没有提供格式化选项。例如,没有办法控制使用几位有效数字来表示一个浮点值。

通过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 KeyError as err:

print('ERROR:', str(err))

print('safe_subtitute():', t.safe_substitute(values))

___________________输出_________________________________

ERROR :'missing'

safe_subtitute(): %var is here but %missing is not provided

由于字典中没有missing的值,所以substitute()会产生一个KeyError异常。safe_substitute()则不同,他不会抛出这个错误,而是会捕获这个错误并保留文本中的变量表达式。

高级模板:

可以调整string.Template在模板体重查找变量名所使用的正则表达式模式,以改变她的默认语法。修改delimiter和idpattern类属性。

import string

class MyTemplate(string.Template):

delimiter = '%'

idpattern = '[a-z]+_[a-z]+'

template_text = '''

Delimiter : %%

Replaced : %with_underscore

Ignored : %notunderscored

'''

d = {

'with_underscore': 'replaced',

'notunderscored' : 'not replaced',

}

t = MyTemplate(template_text)

print('Modified ID pattern')

print(t.safe_subtitute(d))

_______________________输出__________________________

Modified ID pattern

Delimiter : %

Replaced : replaced

Ignored : %notunderscored

在上面这个例子中替换规则已经通过正则表达式改变,定界符是%而不是$,而且变量名中间的某个位置必须包含一个下划线。模式%notunderscored不会被替换成任何字符串,因为它不包含下划线符号。

完成更加复杂的修改,可以覆盖pattern属性并定义一个全新的正则表达式。所提供的模式必须包含4个命令组,分别捕获转义定界符、命名变量、加括号的变量名和不合法的定界符模式。

import string

t = string.Template('$var')

print(t.pattern.pattern)

___________________输出_____________________

\$(?:

(?P\$) | # Escape sequence of two delimiters

(?P(?a:[_a-z][_a-z0-9]*)) | # delimiter and a Python identifier

{(?P(?a:[_a-z][_a-z0-9]*))} | # delimiter and a braced identifier

(?P) # Other ill-formed delimiter exprs

)

t.pattern为一个已经编译正则表达式,不过可以通过它的pattern属性得到原来的字符串

创建一个新模式的新的模板类型,这里使用{{var}}作为变量语法

import re

import string

class MyTemplate(string.Template):

delimiter ='{{'

pattern = r'''

\{\{(?:

(?P\{\{)|

(?P[_a-z][_a-z0-9]*)\}\}|

(?P[_a-z][_a-z0-9]*)\}\}|

(?P)

)

'''

t = MyTemplate('''

{{{{

{{var}}

''')

print('MATCHES:', t.pattern.findall(t.template))

print('SUBSTITUTED:',t.safe_substitute(var='replacement'))

_________________________输出___________________________________

MATCHES: [('{{', '', '', ''), ('', 'var', '', '')]

SUBSTITUTED:

{{

replacement

python3 模板库 好用_Python3的string库模板的应用相关推荐

  1. python安装第三方库有哪些_python3.6安装库的方法有哪些

    python3.6安装库的方法有哪些 发布时间:2020-09-03 11:58:39 来源:亿速云 阅读:72 作者:小新 小编给大家分享一下python3.6安装库的方法有哪些,相信大部分人都还不 ...

  2. python3.7如何安装库_Python3.7版库的安装以及常用方法(十分简单)

    首先你的python里面必须要有pip,有的话你就可以直接在cmd窗口的python所在主目录下输入pip install "你要安装的库". 下面以 matplotlib为例. ...

  3. Lua string库整理

    string库提供了字符串处理的通用函数. 例如字符串查找.子串.模式匹配等. 当在 Lua 中对字符串做索引时,第一个字符从 1 开始计算(而不是 C 里的 0 ). 索引可以是负数,它指从字符串末 ...

  4. Python3.x(windows系统)安装libxml2库

    Python3.x(windows系统)安装libxml2库 cmd安装命令: pip install lxml 执行结果: 再执行命令: pip install virtualenv 执行结果: 转 ...

  5. python string库_《python标准库》--string

    作用:包含处理文本的常量和类. 1.capwords():将一个字符串中所有单词的首字母大写. 1 >>> importstring2 >>> s = 'The q ...

  6. python基础代码库-python3.4第三方库的安装?python基础代码库

    python怎么安装下载模块 python安装下载模块的:1.按盘上的[win r]快,打开运行窗口:2.输入cmd,点击定]:3.在打开的命令提示符中执行[pip install 模块名]命令即可. ...

  7. Lua 之string库

    标准string库 基础字符串函数 string.len(s) 返回一个字符串的长度,例如 print(string.len("hello world")) -- 11 strin ...

  8. python3从零学习-6.0、第三方库

    第三方库可以在这里查询:https://pypi.org/ 目前已经有成千上万的三方库可供选择,这个也是python魅力吸引人的地方,有许许多多的轮子,不必每个东西都自己造轮子,可以选择合适的三方库用 ...

  9. Lua语法小贴士(二)string库

    string库 byte方法,返回byte值: print(string.byte("abc")) --97 print(string.byte("abc", ...

最新文章

  1. 转挣扎的菜鸟 - 当OD不能装载也不能附加程序时
  2. hdu2102 水搜索
  3. 学python编程_学习Python编程,我们应该如何学?学习内容包括哪些?
  4. 计算机与现代化投稿流程,计算机与现代化投稿须知
  5. 朴素贝叶斯和贝叶斯估计_贝叶斯估计收入增长的方法
  6. C++学习系列笔记(四)
  7. css3 first letter,::first-letter
  8. 小白学vb还是python_小白学 Python 爬虫(30):代理基础
  9. 一块移动硬盘怎样兼容Mac和Windows系统,并且可以在time machine上使用
  10. java程序员入职自我介绍,看完直接跪服
  11. vim配置:高亮所在的行和列
  12. 各学科领域入门书籍推荐
  13. 快速排序 C语言代码 空间复杂度时间复杂度
  14. C++ 依赖倒置原则
  15. 需求与商业模式创新-4-战略
  16. c语言大于一小于10,C语言首先输入一个大于2且小于10的整数
  17. SteamVR Unity工具包(VRTK)之概览和控制器事件
  18. Java 获取当前服务器公网IP
  19. ANSYS | 螺栓模拟
  20. 孟岩亮相TokenSky,首谈通证的多维、多阶、多态体系

热门文章

  1. linux系统中tar命令的使用,linux 系统的tar命令使用方法详解
  2. 程序员的浪漫:女神节专用开源项目
  3. 皮一皮:文化人的情侣头...
  4. 如何在代码中获取Java应用当前的版本号?
  5. 皮一皮:究竟经历了什么才让他用上如此设备...
  6. 还在忍受限速网盘?来搭建一套自己的私有网盘!
  7. 每个程序员都必须知道的8种数据结构
  8. 硬核推荐:博主神器OpenWrite,免费的一文多发平台,无需部署,注册即用,安全可靠!...
  9. 我说分布式事务之消息最终一致性事务(二):RocketMQ的实现
  10. 为什么前后端分离了,你比从前更痛苦?