Python库yaml适用于做什么,如何安装使用
Admin 2022-06-18 群英技术资讯 320 次浏览
yaml是Python的第三方库。YAML is a human friendly data serialization standard for all programming languages(YAML是一个对所有编程语言都很友好的数据序列化标准)。
但为了强调该语言以数据为中心,而不是以标记语言为重点,而用返璞词重新命名。它是一种直观的能够被电脑识别的数据序列化格式,是一种可读性高且容易被人类阅读、容易和脚本语言(不仅仅是Python)交互,用于表达资料序列的编程语言。YAML语言的本质是 一种通用的数据串行化格式。
使用冒号代表,格式为 key: value。冒号后须加一个空格。
使用缩进表示层级关系,如下:
key: child_key1: value1 child-key2: value2
YAML还支持流式(flow)语法表示对象,上例可写成:
key: {child_key1: value1, child_key2: value2}
这在Python中是 字典嵌套字典,是这么写的:
"key": { "child_key1":"value1", "child_key2":"value2" }
较为复杂的对象格式,可使用 一个问号 加一个空格代表一个复杂的key,配合一个冒号加一个空格 代表一个value:
? - complex_key1 - complex_key2 : - complex_value1 - complex_value2
上述表示:对象的属性是一个数组[complex_key1, complex_key2],其对应的值也是一个数组[complex_value1, complex_value2]。
使用一个短横线 加一个空格代表一个数组项:
hobby: - python - test
也可以这样说:
- - python - test
可简单理解为:[[python, test]]
再看一个相对复杂的例子:
role: - id: 1 name: developer auth: dev - id: 2 name: tester auth: test
可理解为:role属性是一个数组,每个数组元素又是由id、name、auth 3个属性构成。
用流式(flow)的方式表示如下:
role: [{id: 1, name: developer, auth: dev}, {id: 2, name: tester, auth: test}]
可结合使用,形成复合结构
languages: - Ruby - Perl - Python websites: YAML: yaml.org Ruby: ruby-lang.org Python: python.org Perl: use.perl.org
纯量是最基本的、不可再分的值。YAML提供了多种常量结构:整数、浮点数、字符串、NULL、日期、布尔值、时间。
int: - 123 - 0b1010_0111_0100_1010_1110 # 二进制表示 float: - 3.14159 - 6.6e+5 # 可使用科学计数法 string: - 'Hello world!' # 可使用双引号或单引号包裹特殊字符,双引号不会对特殊字符转义。 - newline newline2 # 字符串可拆成多行,每一行会被转化成一个空格 null: nodeName: 'node' parent: ~ # 使用 ~ 表示null boolean: - TRUE # true 或True都可以 - FALSE # false 或False都可以 date: - 2018-12-29 # 日期必须使用ISO 8601格式,即yyyy-MM-dd datetime: - 2018-12-29T18:43:21+08:00 #时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区
server: address: 192.168.1.100 --- spring: profiles: development server: address: 127.0.0.1 --- spring: profiles: production server: address: 192.168.1.120
上述例子定义两个profile,一个development、一个production。
也可以用 ―来分割不同的内容,比如记录日志:
--- Time: 2018-12-29T19:09:30+08:00 User: ed Warning: This is an error message for the log file. --- Time: 2018-12-29T19:11:45+08:00 User: ed Warning: A slightly different error message.
--- time: 19:13:09 player: Tim action: strike ... --- time: 20:14:45 player: Lily action: grand ...
此例相当于在一个yaml文件中连续写了两个yaml配置项。
string: - !!str 123456 - !!str true
相当于将数字和布尔类型强转为字符串(允许转换的类型还有很多)。
acomplistment: > Mark set a major league home run record in 1998. status: | 65 Home Runs 0.278 Batting Average
accomplistment的结果为:
accomplistment=Mark set a major league home run record in 1998.
status的结果为:
status=65 Home Runs 0.278 Batting Average
hr: - Mark McGwire - &SS Sammy Sosa rbi: - *SS - Ken Griffey
在hr中,使用&SS为Sammy Sosa设置了一个锚点(引用),名称为SS;在rbi中,使用*SS完成了锚点使用。结果是:
{rbi=[Mark McGwire, Ken Griffey], hr=[Mark McGwire, Sammy Sosa]}
也可以这样定义:
SS: &SS Sammy Sosa hr: - Mark McGwire - *SS rbi: - *SS - Ken Griffey
还可以用锚点定义更复杂的内容:
default: &default - Mark McGwire - Sammy Sosa hr: *default
hr相当于引用default数组。不过,hr: *default须写在同一行。
merge: - &CENTER { x: 1, y: 2 } - &LEFT { x: 0, y: 2 } - &BIG { r: 10 } - &SMALL { r: 1 } sample1: <<: *CENTER r: 10 sample2: << : [ *CENTER, *BIG ] other: haha sample3: << : [ *CENTER, *BIG ] r: 100
在merge中,定义了四个锚点,分别在sample中使用。
sample1中,<<: *CENTER意思是引用{x: 1,y: 2},并且合并到sample1中,那么合并的结果为:sample1={r=10, y=2, x=1}
sample2中,<<: [*CENTER, *BIG] 意思是联合引用{x: 1,y: 2}和{r: 10},并且合并到sample2中,那么合并的结果为:sample2={other=haha, x=1, y=2, r=10}
sample3中,引入了*CENTER, *BIG,还使用了r: 100覆盖了引入的r: 10,所以sample3值为:sample3={r=100, y=2, x=1}
有了合并,我们就可以在配置中,把相同的基础配置抽取出来,在不同的子配置中合并引用即可。
yaml包名是 pyyaml,但导入是yaml。
以 【用Python 读取yaml文件(后缀可为 .yml 或 .yaml)】为例:先用open方法读取文件数据,再通过load方法转成字典(load方法跟json的load是相似的)。
在同一个文件夹下,编写yaml文件,名为 cfg.yml,内容如下:
nb: user: admin psw: 123456
编写读取yaml文件的.py文件,名为 readyml.py,内容如下:
import yaml import os curPath = os.path.dirname(os.path.realpath(__file__)) # 获取当前脚本所在文件夹路径 ymlPath = os.path.join(curPath, "cfg.yml") # 获取yaml文件路径 # 用open方法打开直接读取 f = open(ymlPath, 'r') cfg = f.read() print(type(cfg)) # 读取的结果是 字符串 print(cfg) d = yaml.load(cfg) # 用load方法转字典 print(d) print(type(d)) a = {'name': 'Tom', 'race': 'cat', 'traits': ['Two_Hand', 'Two_Eye'] } ret = yaml.dump(a) print(ret) print(type(ret))
其中,最重要的两个方法:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍了练习深度学习的一个小工程,代码简单明确,用来作为学习深度学习的练习很适合,对于有需要的朋友可以参考下,希望大家可以体验到深度学习带来的收获
这篇文章主要为大家介绍了Python基础面向对象之继承与派生详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪<BR>
本文将通过股票均线计算的案例来为大家讲解一下NumPy中的线性关系以及数据修剪压缩的实现,文中的示例代码讲解详细,感兴趣的可以了解一下
这篇文章主要介绍了pytorch教程中网络的构建流程,文中附含了详细的示例代码流程,有需要的朋友可以借鉴参考下,希望可以有所帮助
这篇文章主要为大家介绍了Python代码的一些方便快捷的调试技巧,文中含有详细新的步骤操作,有需要的朋友可以借鉴参考下,希望能够有所帮助
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008