首页 > 其他分享 >关键字 开发-03 渲染yaml文件中的变量

关键字 开发-03 渲染yaml文件中的变量

时间:2023-11-24 18:22:31浏览次数:47  
标签:03 name 关键字 age yaml Template print my

前言:引用渲染变量的模板有2个,一个是字符串模板,另一个是Jinja2模板

1. 字符串模板

1.1.1 通过字符串格式化方法进行渲染需要渲染的变量:

name = "dack"
age = 23

x = 'my name is %s, my age is %d' % (name, age)
print(x)

y = "my name is {}, my age is {}".format(name, age)
print(y)

z = f"my name is {name}, my age is {age}"
print(z)

1.1.2 template字符串模板

template 是字符串模板,用于替换字符串中的变量,是 string 的一个类引用变量有 2 种格式

  • $variable 使用 $变量名 引用变量
  • ${variable} 使用 ${变量名} 大括号包起来
# 第一种:$variable
from string import Template

tempTemplate_1 = Template("My name is $name, I like $fancy")
d = {"name": "dack", "fancy": "Python"}
print(tempTemplate_1.substitute(d))
# 结果: my name is dack, my age is 23

# 第二种:${variable}
tempTemplate_2 = Template("My name is ${name}, I like ${fancy}")
c = {"name": "dack", "fancy": "Python"}
print(tempTemplate_2.substitute(c))
# 结果: my name is dack, my age is 23

"""============================================================================"""

# 上面的方式只能严格的匹配变量,当字符串中有 $ 符号,不想匹配变量的时候,会报错
# safe_substitute 使用
from string import Template
tempTemplate_3 = Template("$My name is ${name}, I like ${fancy}")
e = {"name": "dack", "fancy": "Python"}
print(tempTemplate_3.substitute(e))
# 结果:error: KeyError: 'My'

# 忽略上面的error,使用Template里的safe_substitute方法,可以忽略匹配不到的变量
print(tempTemplate_3.safe_substitute(e))
# 结果:$My name is dack, I like Python
# 虽然字符串定义了多个变量,但是引用的时候只给了name这个值,也不影响运行,没给值的当普通字符串出来,这样就很完美了

1.1 yaml文件引用变量

test_login:
  name: 登录成功
  request:
    url: /api/v1/auth/login
    method: POST
    json:
      username: ${username}
      password: ${password}

test_login2:
  name: 登录失败
  request:
    url: /api/v1/auth/login
    method: POST
    json:
      username: "admin"
      password: "Admin@2233"

修改读取yaml文件的代码块:

# utils/read_file.py
import yaml
from string import Template
from pathlib import Path

def read_yaml(file_path: Path):
    """
    读取 yaml 数据,转 python 类型
    :param file_path:
    :return: dict
    """
    with open(file_path, 'r', encoding='utf-8') as fp:
        read_yml_data = fp.read() # 读到的是字符串
        temTemplate = Template(read_yml_data)
        yaml_data = temTemplate.safe_substitute({"username": "admin", "password": "Admin@22"})
        # str 转 python dict
        yaml_data = yaml.safe_load(yaml_data)
    return yaml_data


if __name__ == '__main__':
    file_path = Path(__file__).parent.parent.joinpath('data', 'login.yml')
    res = read_yaml(file_path)
    print(res)
    print(type(res))  # -->dict

运行结果:

2. jinja2模板

标签:03,name,关键字,age,yaml,Template,print,my
From: https://www.cnblogs.com/dack-zt-deng/p/17854472.html

相关文章

  • CF685E Travelling Through the Snow Queen's Kingdom
    题意给定一张图,走出当前边的时间为\(i\)。\(q\)次询问,问\(s\)是否能在\(l\tor\)中走到\(t\)。Sol考虑将边从大到小插入图中。注意到当前边只能对起点造成贡献。复杂度\(O(n\times\max\{n,m\})\)Code#include<iostream>#include<algorithm>#include<cstd......
  • error:0308010C:digital envelope routines::unsupported
    执行:npmrunserve 出现:error:0308010C:digitalenveloperoutines::unsupported原因:npm版本升级解决:package.json增加配置"scripts":{"serve":"setNODE_OPTIONS=--openssl-legacy-provider&&vue-cli-serviceserve","b......
  • 03_Exception in thread “main“ java.lang.AssertionError
    问题maven构建报错***[INFO]---maven-compiler-plugin:3.8.1:compile(default-compile)@engine_auth---[INFO]Changesdetected-recompilingthemodule![INFO]Compiling38sourcefilestoC:\Users\...\target\classes[INFO]-----------------------------......
  • 处理一张图片生成10个子图片,而且读取语义文本,比如'red hat'
    完成了,对两个函数的重构,放入了imagebox.py文件中我从博客的文章日志,继续处理twitter数据集,重构代码。正向反馈,提高效率。重构save_10_boximg函数1.添加im_file参数2.添加生成boxlist的流程,目的是,让接口只需要调用save_10_boximg函数,就可以完成对子图片的提取。这样就可以为下一步提......
  • Constructors in '@immutable' classes should be declared as 'const'.
    警告信息Flutter开发遇到如下警告Constructorsin'@immutable'classesshouldbedeclaredas'const'.报错代码classTaskWidgetextendsStatefulWidget{finalStringtitle;finalboolisChecked;finalintorder;TaskWidget({requiredthis.......
  • MySQL将'20231124'转换为'yyyy/MM/dd'格式
    可以使用STR_TO_DATE函数将一个字符串转换为日期,并使用DATE_FORMAT函数将日期格式化为指定的格式SELECTDATE_FORMAT(STR_TO_DATE('20231124','%Y%m%d'),'%Y/%m/%d');解释一下上述语句的步骤:STR_TO_DATE('20231124','%Y%m%d')将字符串"20231124"转换为日期......
  • mysql5.0升级8.0完成后,服务器重启引发"#1449 - The user specified as a definer ('m
    遇到的问题:问题一:ERROR1449(HY000):Theuserspecifiedasadefiner('mysql.infoschema'@'localhost')doesnotexist异常原因:未知解决办法:验证指定的用户('mysql.infoschema'@'localhost')是否存在于mysql数据库中SELECTUserFROMmysql.userWH......
  • 这么多年关于SQL关键字你不知道的那些用法........
    简单聊聊,常用的sql关键字还可以这样用…来访者,你好,请叫我标题党!!!---------------------------------------------------------------------------------------------------------------.对于很多时候代码写的好与坏主要取决于sql语句6不6,话不多说上代码主要是讲解查询sql增加啊,......
  • 关键字 开发-02 关键字驱动执行yaml用例
    1.封装request运行方法我们将测试数据写到yaml文件中,通常会使用pytest框架parametrize参数化的方式读取yaml文件数据生成测试用例,于是我们可以根据这个思路来开发。#utils/request_session.pyimportrequestsimportrefromrequestsimportResponseclassParserError(Ex......
  • 报错 ImportError: cannot import name 'Celery' from partially initialized module
    #目录结构问题 原来目录结构:改为: 把check_result produce_task拿出来 ......