yaml.load与yaml.dump方法
该模块提供了一些方法,不过常用的方法只有两个yaml.load和yaml.dump ,以下是一个版本相关的yaml 格式文件[root@361way yaml]# cat tree.yaml
treeroot:
branch1:
name: Node 1
branch1-1:
name: Node 1-1
branch2:
name: Node 2
branch2-1:
name: Node 2-1
yaml.load方法:# 脚本内容
[root@361way yaml]# cat load.py
import yaml
f = open('tree.yaml')
dataMap = yaml.load(f)
f.close()
print dataMap
# 执行结果如下
[root@361way yaml]# python load.py
{'treeroot': {'branch2': {'branch2-1': {'name': 'Node 2-1'}, 'name': 'Node 2'}, 'branch1': {'branch1-1': {'name': 'Node 1-1'}, 'name': 'Node 1'}}}
yuml.dump方法:
这里还承接上面的脚本,调用里面的dataMap 数据,将其保存一直新的yaml 文件,如下:# 代码如下:
f = open('newtree.yaml', "w")
yaml.dump(dataMap, f)
f.close()
#newtree.yaml 的结果如下
[root@361way yaml]# cat newtree.yaml
treeroot:
branch1:
branch1-1: {name: Node 1-1}
name: Node 1
branch2:
branch2-1: {name: Node 2-1}
name: Node 2
除此之外,还有safe_load、safe_dump、 load_all 等主法,具体可以通过pydoc yaml 进行查看。
三、yaml、xml与json1、yaml 与xml
以下是同一内容,分别使用xml 语言标记与 yaml 语言标记:# xml标记两个site
sina
http://www.111cn.net
http://www.91it.org
# 使用yaml标记两个site
---
site:
name: sina
url : http://www.111cn.net
---
site:
name: google
url : http://www.91it.org
# 使用yaml标记两个site
---
site: {name: sina, url: http://www.111cn.net }
---
site: {name: google, url: http://www.111cn.net}
从读取查看的角度来看,有没有发现yaml 相对xml 语言的优势。
2、yaml 与 json
准确的说json 应该算是yaml 标准下的一个字集,通过python语句可以很方面的在两者之间进行转换。
a、转换YAML到JSON# python -c 'import sys, yaml, json; json.dump(yaml.load(sys.stdin), sys.stdout, indent=4)' file.json
或
#!/usr/bin/env python
import yaml,json
yml = """
---
foo: bar
"""
data = yaml.load(yml)
json = json.dumps(data)
print(json)
b、转换JSON到YAML# python -c 'import sys, yaml, json; yaml.dump(json.load(sys.stdin), sys.stdout, default_flow_style=False)' file.yaml
或
#!/usr/bin/env python
import json,yaml
str = '{ "foo": "bar" }'
data = json.loads(str)
yml = yaml.safe_dump(data)
print(yml)
注:很多情况下,甚至可以直接将json后缀的文件改为yaml 后缀,使用yaml 语言直接解析。