Python3的string库模板的应用
模板
字符串模板将作为内置的拼接语法的替代用法。使用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<escaped>\$) | # Escape sequence of two delimiters
(?P<named>(?a:[_a-z][_a-z0-9]*)) | # delimiter and a Python identifier
{(?P<braced>(?a:[_a-z][_a-z0-9]*))} | # delimiter and a braced identifier
(?P<invalid>) # Other ill-formed delimiter exprs
)
t.pattern为一个已经编译正则表达式,不过可以通过它的pattern属性得到原来的字符串
创建一个新模式的新的模板类型,这里使用{{var}}作为变量语法
import re
import string
class MyTemplate(string.Template):
delimiter ='{{'
pattern = r'''
\{\{(?:
(?P<escaped>\{\{)|
(?P<named>[_a-z][_a-z0-9]*)\}\}|
(?P<braced>[_a-z][_a-z0-9]*)\}\}|
(?P<invalid>)
)
'''
t = MyTemplate('''
{{{{
{{var}}
''')
print('MATCHES:', t.pattern.findall(t.template))
print('SUBSTITUTED:',t.safe_substitute(var='replacement'))
_________________________输出___________________________________
MATCHES: [('{{', '', '', ''), ('', 'var', '', '')]
SUBSTITUTED:
{{
replacement
Python3的string库模板的应用的更多相关文章
- Lua string库整理
string库提供了字符串处理的通用函数. 例如字符串查找.子串.模式匹配等. 当在 Lua 中对字符串做索引时,第一个字符从 1 开始计算(而不是 C 里的 0 ). 索引可以是负数,它指从字符串末 ...
- lua的string库与强大的模式匹配
lua原生解释器对字符串的处理能力是十分有限的,强大的字符串操作能力来自于string库.lua的string函数导出在string module中.在lua5.1,同一时候也作为string类型的成 ...
- 对python3中pathlib库的Path类的使用详解
原文连接 https://www.jb51.net/article/148789.htm 1.调用库 ? 1 from pathlib import 2.创建Path对象 ? 1 2 3 4 5 ...
- 从C,C++,JAVA和C#看String库的发展(一)----C语言和C++篇
转自: http://www.cnblogs.com/wenjiang/p/3266305.html 基本上所有主流的编程语言都有String的标准库,因为字符串操作是我们每个程序员几乎每天都要遇到的 ...
- Lua的string和string库总结
Lua有7种数据类型,分别是nil.boolean.number.string.table.function.userdata.这里我总结一下Lua的string类型和string库,复习一下,以便加 ...
- Lua 之string库
标准string库 基础字符串函数 string.len(s) 返回一个字符串的长度,例如 string.rep(s, n) 返回一个新的字符串,该字符串是参数s重复n次得到的结果,例如 )) -- ...
- 在lua的string库和正则表达式
一.前提要了解一下lua 的string几个方法 1. string库中所有的字符索引从前往后是1,2,...;从后往前是-1,-2,... 2. string库中所有的function都不会直接操作 ...
- lua string 库
--lua中字符串索引从前往后是1,2,……,从后往前是-1,-2……. --string库中所有的function都不会直接操作字符串,只返回一个结果. ---------------------- ...
- Lua 中的string库(字符串函数库)总结
(字符串函数库)总结 投稿:junjie 字体:[增加 减小] 类型:转载 时间:2014-11-20我要评论 这篇文章主要介绍了Lua中的string库(字符串函数库)总结,本文讲解了string库 ...
随机推荐
- mysql5.7.21下载及安装步骤
以前都是用的5.6的数据库,现在想着换个新版本数据库.跟上时代的步伐,于是安装了一天才安装好.具体步骤如下: 1.官网下载mysql解压zip版,由于客户端安装版都是32位的,我的电脑是64位系统,所 ...
- oracle 结果集合并
SELECT case ' then ()) FROM T_UEP_DB_UNION A ' ' start with A.UNION_CODE = U.UNION_CODE CONNECT BY P ...
- 比原链(Bytom)先知节点 Ubuntu接入文档
系统要求 我们建议选择知名的VPS服务商,运行比原链节点对算力没有要求,但是请配置尽可能大的磁盘空间. 节点服务器最小配置: 操作系统: Windows/Linux/Docker CPU: 2核 内存 ...
- 用Tensorflow实现DCGAN
1. GAN简介 最近几年,深度神经网络在图像识别.语音识别以及自然语言处理方面的应用有了爆炸式的增长,并且都达到了极高的准确率,某些方面甚至超过了人类的表现.然而人类的能力远超出图像识别和语音识别的 ...
- bug日记之---------js中调用另一个js中的有ajax的方法, 返回值为undefind
今天做一个OCR授权的需求, 需要开发一个OCR弹框, 让用户选择是否授权给第三方识别公司(旷世科技)保存和识别用户个人信息, 照片等. 其中用到了在一个js的方法中调用另外一个js的方法, 其中有一 ...
- python on sql
USE [DemoDb]GOexecute sp_execute_external_script @language = N'Python', @script = N'a = 1b = 2c = a/ ...
- 流程与IT管理是未来IT行业发展的必经之路
流程与IT管理是未来IT行业发展的必经之路 PM圈子 百家号17-11-2411:30 本文由“光环国际”—中国项目管理PMP培训上市企业转载 IT部门的职责之所以能够从辅助部门发展成业务支撑部门,最 ...
- _spellmod_base
技能基础修改(进去可能会改动) 可以配合数据库的spell_dbc在线制作无补丁技能. 具体效果查询DBC表 `spellid` int(11) NOT NULL DEFAULT '0', `Effe ...
- P3953 逛公园
传送门 花了一个下午才 A 的毒瘤题 思路: 这题需要建两个图,一个正向图,一个反向图. 先在正向图上跑一遍 dijkstar ,计算出每个点到 点1 的最短路径 . 然后在反向图上开始记忆化搜索: ...
- ConcurrentHashMap为何不会出现ConcurrentModificationException异常