读取配置文件,java读取yaml文件
yaml 1简介。YAML [JML]:另一种标记语言:另一种标记语言。Yaml是一种专门写配置文件的语言,非常简洁,功能强大。它本质上是一种通用的数据序列化格式。YAML是一种非常灵活的格式,几乎是JSON的超集。除了支持注释、换行符、多行字符串、裸字符串和更灵活的类型系统,YAML还支持引用文件以避免重复代码。
2.在自动化测试中,yaml文件通常用于编写自动化测试用例。例如:
3.yaml的基本语法规则:
区分大小写的缩进表示层次关系。缩进时不允许制表符,只允许空格。缩进空格的数量无关紧要。只要同一级别的元素靠左对齐,#就表示注释。从这个字符到行尾,它将被解析器忽略。这和python的评论是一样的。4.yaml支持三种数据结构:
对象:一组键值对,也称为映射)/哈希)/字典数组:一组按顺序排列的值,也称为序列)/列表标量:单个不可分的值。字符串,布尔值,整数,浮点数,空值,时间,日期5。在python中,带有文件后缀的文件。yml和。yaml有同样的功能,就是yaml文件;总的来说,yml是yaml文件最常用的扩展。例如:
6.检查yaml文件格式是否正确的在线网站:http://www.bejson.com/validators/yaml/
安装yaml使用pip安装pyyaml模块:
pip安装pyyaml
yaml文件支持的数据结构示例1。yaml中的键值对,即python中的字典数据类型;例如,python字典:
# python3.6
{
用户:管理员,
psw: 123456,
}在yaml文件中,可以这样写:
# yaml
用户:管理员
Psw: 1234562,字典嵌套字典:
# python3.6
nb1 :
用户:管理员,
psw: 123456,
}可以在}yaml文件中这样写:
# yaml
nb1:
用户:管理员
PSW:YAML文件中的123456yaml序列(列表)。要在YAML文件中写一个数组,需要在它前面加一个-号。如下所示:
-管理员1: 123456
-管理员2: 111111
-admin3: 222222对应于python中的列表数据类型:
[{admin1: 123456}],
[{admin2: 111111}],
[{[{admin3: 222222}]]注意:数字发音为int或float类型。
yaml文件中标量(str)1、int和float类型的数量
N1: 12.30对应python
{n1: 12.3}2。布尔值用真和假来表示。
n2:对
N3: false在python中对应于
{n2: True, n3: False}注意:与从文本中读取并通过反序列化转换为python数据类型的json格式字符串相同。
3.没有一个是用~表示的。
N4: ~对应python的
{n4: None}注意:当从文本中读取的json格式的字符串为null时,转换为python的数据类型为None。
4.时间采用ISO8601格式
1: 2001-12-14T21: 59: 43.10-05: 00对应python的
{ time 1 :datetime . datetime(2001年12月15日,2,59,43,100,000)} 5。在复合iso8601格式中,日期由年、月和日表示。
日期:2017-07-31对应python的
{ date 1 :datetime . date(2017年7月31日)} 6。使用两个感叹号来转换数据类型。
# int到str
n6:Str 123对应于python的
{n6: 123}#布尔值到字符串
n7:True对应于python中的。
{n7: true}示例:在yaml文件中编写以下内容:
n1: 12.30
n2:对
n3:错误
n4: ~
时间1: 2018-04-18t21:59:43.10 08:00
日期1: 2018-04-18
n6:str 123
n7:真实python读取结果:
{n1: 12.3,
n2 :真,
n3 :假,
n4 :无,
time1: datetime.datetime(2018,4,18,13,59,43,100000),
date1: datetime.date(2018,4,18),
n6: 123 ,
N7: true}混合使用1,列出嵌套的dict,并用yaml写出以下内容:
-用户:管理员1
PSW:“123456”
-用户:管理员2
PSW:“111111”
-用户:admin3
PSW:“222222”用python读出的结果:
[{user: admin1 , psw: 123456},
{user: admin2 , psw: 111111},
{user: admin3 , PSW: 22222}] 2。dict嵌套列表,并用yaml写了以下内容:
nub1:
- admin1
- 123456
nb2:
- admin2
- 111111
nb3:
- admin3
- 222222用大蟒读取出来的结果:
{nub1: [admin1 , 123456],
nb2: [admin2 , 111111],
nb3: [admin3 , 222222]}使用大蟒的负载()方法读取格式文件内容【反序列化】data=yaml.load(f,Loader=yaml .满载)在yaml.load方法中,装载机参数有四种:
基本加载器:载入大部分的基础YAML
安全加载器:载入YAML的子集,推荐在不可信的输入时使用
满载:这是默认的载入方式,载入全部YAML
UnsafeLoader:老版本的载入方式
注意:
需要加上参数:Loader=yaml .满载机
否则会报错:YAMLLoadWarning:在没有装载机=的情况下调用yaml.load().不推荐使用,因为默认加载程序不安全。请阅读https://msg.pyyaml.org/load的全部细节。
如图:
举例1:
导入格式
def main():
带开(。/data.yaml , r )作为女:
data=yaml.load(f,Loader=yaml .满载)
打印(数据)
if __name__==__main__ :
主()举例2:
#编码:utf-8
导入格式
导入操作系统
# 获取当前脚本所在文件夹路径
曲线路径=OS。路径。dirname(OS。路径。真实路径(_ _ file _ _))
# 获取格式文件路径
yamlPath=os.path.join(curPath, cfgyaml.yaml )
#打开方法打开直接读出来
f=open(yamlPath, r ,encoding=utf-8 )
cfg=f.read()
打印(类型(cfg)) #读出来是字符串
打印(cfg)
d=yaml.load(cfg,Loader=yaml .满载)#用负荷方法将数据字符串转换字典类型
打印(四)型)运行结果:
使用大蟒的安全负载()方法读取格式文件内容【反序列化】使用yaml.safe_load()方法,这个只解析基本的格式标记,用来保证代码的安全性,不过这对于平常保存数据是足够了。
源码如下:
定义安全负载(流):
解析流中的第一个YAML文档
并产生相应的计算机编程语言对象。
仅解析基本的YAML标签。这是众所周知的
对于不可信的输入是安全的。
返回加载(流、安全加载器)
定义加载(stream,Loader=None):
解析流中的第一个YAML文档
并产生相应的计算机编程语言对象。
如果装货设备为无:
load _ warning("load ")
装载机=满载机
加载器=加载器(流)
尝试:
return loader.get_single_data()
最后:
loader.dispose()可以看到安全负载()方法就是在负荷方法中传入安全加载器的解析器,那么格式有些什么装货设备呢?
unsfel装载机加载器
原始加载程序代码很容易被不可信的数据输入所利用。
安全加载器:
安全地加载YAML语言的子集。对于加载不受信任的输入,建议这样做。
安全的加载格式语言子集,对于加载不受信任的输入,推荐使用此种方式yaml.safe_load()
满载:
加载完整的YAML语言。避免任意代码执行。这是当前(py YAML 5.1)YAML。负载(输入)调用的默认加载程序(发出警告后)。
加载完整的格式语言,从上方的源码可以看出这个是负载()默认的加载方式
基本加载器:
仅加载最基本的YAML
只加载最基本的yamlsafe_load()方法举例:
a.yml文件:
代码如下:
导入格式
从字符串导入模板
def yaml_template(data: dict):
用打开( a.yml ,编码=utf-8 )作为女:
re=模板(f.read()).替代(数据)
返回yaml.load(stream=re,Loader=yaml .满载)
if __name__==__main__ :
print(YAML _ template({ token : hdadhh 21 uh 1283 hashdhuh 2 HD ,用户名: admin ,密码: 123456}))运行结果:
{method: get , url: http://www.baidu.com , headers :{ Content-Type : application/JSON , token : hda dhh 21 uh 1283 hashdhuh 2 HD }, data: {username: admin , password: 123456}}使用大蟒的转储()方法将大蟒字典写入格式文件【序列化】yaml.dump(data,f,encoding=utf-8 ,allow_unicode=True)当数据数据中有汉字时,加上:encoding=utf-8 ,allow_unicode=True
举例:
导入操作系统
导入格式
yaml_dict={
用户:常规,
国家:中国,
性别:男性,
地址: 北京
}
YAML _ dir=OS。路径。加入(OS。路径。dirname(OS。路径。真实路径(_ _ file _ _), a.yml )
用open(yaml_dir, w ,encoding=utf-8 ,)作为女:
yaml.dump(yaml_dict,f,encoding=utf-8 ,allow_unicode=True)运行结果:
如果在写入格式文件不加编码=utf-8 ,allow_unicode=True参数时,即:
导入操作系统
导入格式
yaml_dict={
用户:常规,
国家:中国,
性别:男性,
地址: 北京
}
YAML _ dir=OS。路径。加入(OS。路径。dirname(OS。路径。真实路径(_ _ file _ _), a.yml )
用open(yaml_dir, w ,encoding=utf-8 ,)作为女:
yaml.dump(yaml_dict,f)运行结果:
如上图,如果在写入格式文件不加编码=utf-8 ,allow_unicode=True可以看到汉字是以采用双字节对字符进行编码码写入到格式文件当中。
在实际使用的时候可以配合,输入参数更新配置文件中的参数使用:定义合并配置(配置,参数):
对于config.keys()中的key_1:
if(isinstance(config[key_1],dict)):
对于配置[答案1]中的关键2 .密钥():
如果(key_2)在目录(参数)中:
config[key _ 1][key_2]=getattr(args,key _ 2)
返回配置
配置=YAML。load(open(args。config, r ,encoding=utf-8 ),Loader=yaml .满载)
配置=合并配置(配置,参数)
去期待陌生,去拥抱惊喜。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。