yaml,到底是不是python脚本中一种神奇的存在?
![头像](http://www.yxskj.cn/wp-content/themes/ceonova-pro/static/images/avatar.png)
最近在写precheck的python脚本的时候,接触到了一个很灵活的文件格式,它不同于robotframework框架中的txt文本文件,同样是实现了配置文件的功能,但是,在python中,yaml让python脚本更加灵活。
在robotframework框架中,传统的配置文件的格式是txt文件,是以如下的形式:${var} 172.28.0.1 @{list1} node1 node2 node3而在yaml文件中,形式就很不一样了。
如下所示:
python2中yaml安装:pip install PyYAML
基本语法1、严格区分大小写2、使用空格缩进表示层级关系,不能使用tab,缩进的数量不限,但是同一缩进左侧对齐3、#表示注释4、yaml支持列表和字典,也支持纯量,即就是单个的值,例如布尔值,整数,浮点数,时间,日期等。
5、- value,表示内容为列表格式数据,中间有一个空格6、key: value,表示为字典格式数据,冒号后面一定要有一个空格yaml文件读取,针对5.4.1版本yaml文件的读取在5.4版本之后略有不同,具体实现有以下三种方式。
方式1import yaml f=open(config.yaml,r) data=yaml.load(f,Loader=yaml.FullLoader) print data方式2import yaml f=open(config.yaml,r) data=yaml.safe_load(f) print data
方式3import yaml f=open(config.yaml,r) yaml.warnings({YAMLLoadWarning: False}) data=yaml.load(f) print data
接着就可以根据列表或者字典的取值方法,自由读取想要的数据了。
当然,yaml文件还有一个很nice的使用,就是函数式的复用,不过在yaml中叫做锚点。举个例子就一目了然了。
&建立锚点,<<>{ “config”: [ { “ip”: “172.28.0.2”, “hostname”: “node2”, “role”: [ “nova”, “cinder” ] }, { “ip”: “172.28.0.2”, “hostname”: “node2”, “role”: [ “nova”, “cinder” ] } ] }
那么为什么说yaml是一种神奇的存在呢?那是因为yaml有以下的优势1、可读性好2、和脚本语言的交互性好3、使用实现语言的数据类型4、模型化的信息结构5、易于实现,容易编写yaml,在python中通常被用作配置文件,比如docker inspect 的信息就可以很好的存放在yaml中。
因为在编程语言中,json结构的数据易于阅读和获取,无论是在作为参数传入还是作为结果的校验,Json格式都给我们的脚本带来了便捷如果有接触虚拟机的伙伴们可能就知道,对于主机以及虚拟机信息的展示,如果使用yaml格式的化,那就真的是太方便了。
所以,yaml,值得一用。