首页 > 编程语言 >Python模板字符串Template如:${变量名称}

Python模板字符串Template如:${变量名称}

时间:2023-10-11 12:22:06浏览次数:36  
标签:code Python 模板 Template 字符串 data 替换 substitute

1.概述 如果你在操作字符串,如果你操作的字符串内容很多,希望字符串中的内容能够根据规则动态替换,并且在长篇幅的字符串中需要替换任意位置任意次数的字符,使用str提供的replace方法代码会写的非常复杂,且出错不易排查。 在这个场景中试试Template类把,他能够创建一个模板替换字符串。  

1.1Template类替换字符串基本操作

1.替换字符串内容并且输出字符串中不存在得字符
import json
import re
from string import Template
# 将list格式的测试用例转化为 字符串格式
test_data = json.dumps(yuan, ensure_ascii=False)

dict_data = {
    "num": 123,
    "name": '李四'
}
# 使用Template模板类 进行数据替换
test_data = Template(test_data).safe_substitute(dict_data)
no_data = []
# 使用函数值 替换 字符串中的 函数
for fun in re.findall('\\${(.*?)}', test_data):
    try:
        test_data = test_data.replace('${%s}' % fun, exec(f"result = {fun}"))
    except Exception as e:
        no_data.append('${%s}' % fun)
# 将 字符串 转化为 list
test_data = json.loads(test_data)
# 数据转json
for i in test_data:
    print('替换完成:{},未查询到的关键字:{}'.format(json.dumps(i),no_data))
    print(i)
    print(type(i))
结果
替换完成:{"ID": 1, "title": "\u65b0\u589e\u5e73\u53f0\u836f\u54c1", "data": "{\"a_b\":\"qqq${a_b()}\",\"condition.baseunit\":\"\u674e\u56db\",\"condition.name\":\"\u6d4b\u8bd5\u996e\u7247123\",\"b_d\":\"${uuu}\"}", "expected_data": "{\"code\":0,\"message\":\"\u6dfb\u52a0\u6210\u529f\uff01\",\"object\":null}", "extract_data": null, "assert_db": null},未查询到的关键字:['${a_b()}', '${uuu}']
{'ID': 1, 'title': '新增平台药品', 'data': '{"a_b":"qqq${a_b()}","condition.baseunit":"李四","condition.name":"测试饮片123","b_d":"${uuu}"}', 'expected_data': '{"code":0,"message":"添加成功!","object":null}', 'extract_data': None, 'assert_db': None}
<class 'dict'>
2.Template类介绍 Python中Template是string中的一个类,可以创建一个模板将字符串的格式固定下来,重复利用。使用它来解决需要在一个字符串中替换多处内容将会减轻开发代码的复杂度,使用起来非常简单。

2.1.Template类替换字符串基本操作

1.替换字符串内容
  • Template构造器接收一个待替换的字符串,字符串中${}里面的字符为需要替换的内容。创建一个模板就完成了。
  • substitute方法参数接收替换的内容,替换模板中的字符串。
from string import Template
s1 = "我在用 ${code} ${num} 开发项目"
s = Template(s1)
print(s.substitute(code='Python',num=3))
运行上面的代码,下面输出了替换后的字符串。
# 我在用 Python 3 开发项目
2.safe_substitute方法替换substitute方法

safe_substitute和substitute方法在用法上都是一样的,但是safe_substitute是安全的可以避免在写代码时候一些疏忽报错。
在开发中建议使用safe_substitute方法,下面通过几个例子介绍下他们的区别。

${}里面的内容和括号有空格会报错

from string import Template
# ${ code }: 括号和code之间有空格
s1 = "我在用 ${ code } ${num} 开发项目"
s = Template(s1)

print(s.safe_substitute(code='Python',num=3))

from string import Template
# ${ code }: 括号和code之间有空格
s1 = "我在用 ${ code } ${num} 开发项目"
s = Template(s1)

print(s.safe_substitute(code='Python',num=3))
print(s.substitute(code='Python',num=3))
运行上面的代码,从结果中可以看出safe_substitute原样输出了变量,没有报错。substitute方法则报错
# safe_substitute输出结果
# 我在用 ${ code } 3 开发项目

# substitute输出结果
raise ValueError('Invalid placeholder in string: line %d, col %d' %
替换的变量和模板中待替换变量数量不一致则会报错。
from string import Template
# ${ code }: 括号和code之间有空格
s1 = "我在用 ${code} ${num} 开发项目"
s = Template(s1)

# 没有替换num
print(s.safe_substitute(code='Python'))

from string import Template
# ${ code }: 括号和code之间有空格
s1 = "我在用 ${code} ${num} 开发项目"
s = Template(s1)

print(s.substitute(code='Python'))
运行上面的代码,从结果中可以看出safe_substitute原样输出了变量,没有报错。substitute方法则报错
# safe_substitute输出结果
# 我在用 Python ${num} 开发项目

# substitute输出结果
KeyError: 'num'
  2.2.通过字典传递数据 如果在Template模板中需要批量替换多个变量,可以使用字典批量传递数据。  
from string import Template

s1 = "我在用 ${code} ${num} 开发项目"
data = {
   'code':'python',
   'num': 3
   }
s = Template(s1)

print(s.safe_substitute(data))
2.3.自定义替换字符串符号 如果你不想使用Template类提供的默认$符号作为替换字符的特殊符号,可以自定义一个喜欢的符号,例如下面使用了&符号替换$符号实现替换字符串。   首先创建一个类,继承Template类,重写类的delimiter属性即可修改默认的$符号
from string import Template

# 继承Template类
class MyTemplate(Template):
    # 重写delimiter类属性,它的作用是识别字符串模板中待替换的字符的特殊符号
    delimiter = '&'

def replace():
    s1 = "我在用 &{code} &{num} 开发项目"

    t = MyTemplate(s1)
    rp = t.safe_substitute(code='Python',num=3)
    print(f'使用自定义的替换字符串符号,替换字符串结果:{rp}')

replace()
运行上面的代码,下面显示&符号替换了字符串
# 使用自定义的替换字符串符号,替换字符串结果:我在用 Python 3 开发项目
  使用自定义的替换字符串符号,替换字符串结果:我在用 Python 3 开发项目 1 2.4.Template运用到项目中 现在开发一个接口测试功能,前端传来的headers中Content-Type属性值是一个待替换的变量。需要将它替换成实际值后在发送接口请求。   下面是一个简化版的替换headers参数,其中headers的值是前端传来的,replace是替换的的目标值,该变量值来自前端传来的变量。  
headers = '{"Content-Type": "${appjson}", "token": "mkJihUPm6BTu6lepfmMo"}'
replace = {'appjson': 'application/json'}

s = Template(headers)
replace_header = s.safe_substitute(replace)
print(f'replace headers:{replace_header}')

#运行上面的代码,headers中的值替换成功
replace_header:{"Content-Type": "application/json", "token": "mkJihUPm6BTu6lepfmMo"}
 

标签:code,Python,模板,Template,字符串,data,替换,substitute
From: https://www.cnblogs.com/wyj497022944/p/17756794.html

相关文章

  • 1、python脚本模拟登陆启信宝
    ##coding:utf-8#importrequests#fromlxmlimportetree#classlogin(object):#def__init__(self):#self.headers={#'Referer':'http://www.qixin.com/auth/login?return_url=%2F',#'User-......
  • Redis的Java客户端——SpringDataRedis、RedisTemplate、StringRedisTemplate
     版权声明:本文为CSDN博主「我爱布朗熊」的原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/weixin_51351637/article/details/127502799一、初步了解SpringDataRedisSpringData是Spring中数据操作的模块,包括对各种数据库的集......
  • 【转】loguru,一个神奇的 python 库
    转载来源:微信公众号:程序员学长 https://mp.weixin.qq.com/s/csxPONEaUbTdoRMd9opuMw大家好,我是小寒。今天给大家分享一个神奇的python库,loguruhttps://github.com/Delgan/loguruLoguru是一个旨在为Python带来愉快的日志记录的库,它可以完全增强你的日志记录体验,并且非常......
  • Python 动态加载模块
    Python动态加载模块-lwp-boy-博客园(cnblogs.com)python动态导入模块import_module和重载reload-掘金(juejin.cn)关于Python的动态导入(import)-知乎(zhihu.com)1,啥叫动态加载:动态加载指在程序运行中,动态的加载模块,而不是在运行之前利用import或from...imp......
  • python+requests库接口自动化测试(超详细)
         ......
  • Python元类详解
    Python中万物皆对象Python是一门面向对象的语言,所以Python中数字、字符串、列表、集合、字典、函数、类等都是对象。利用type()来查看Python中的各对象类型In[11]:#数字In[12]:type(10)Out[12]:intIn[13]:type(3.1415926)Out[13]:floatIn[14]:#字符串......
  • 《流畅的Python》 读书笔记 第二章数据结构(2) 231011
    2.5对序列使用+和*通常+号两侧的序列由相同类型的数据所构成,在拼接的过程中,两个被操作的序列都不会被修改,Python会新建一个包含同样类型数据的序列来作为拼接的结果+和*都遵循这个规律,不修改原有的操作对象,而是构建一个全新的序列l1=[1,2,3]l2=[4,5,6]print(id(l......
  • Python随机波动率(SV)模型对标普500指数时间序列波动性预测|附代码数据
    原文链接:http://tecdat.cn/?p=22546 原文出处:拓端数据部落公众号 最近我们被客户要求撰写关于随机波动率(SV)模型的研究报告,包括一些图形和统计输出。资产价格具有随时间变化的波动性(逐日收益率的方差)。在某些时期,收益率是高度变化的,而在其他时期则非常平稳。随机波动率模型......
  • Python爬虫必杀技:XPath
    XPath是什么XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言。XPath基于XML的树状结构,有不同类型的节点,包括元素节点,属性节点和文本节点,提供在数据结构树中找寻节点的能力。跟BeautifulSoup4一样都是用来解析页面内容的工具,只......
  • Python自动筛选、删除Excel不处于给定区间的数据
      本文介绍基于Python语言,读取Excel表格文件,基于我们给定的规则,对其中的数据加以筛选,将不在指定数据范围内的数据剔除,保留符合我们需要的数据的方法。  首先,我们来明确一下本文的具体需求。现有一个Excel表格文件(在本文中我们就以.csv格式的文件为例),如下图所示。  其中,Exc......