yaml在python上的使用教程详解

爱互踩 爱互踩流量交换~

yaml在python上的使用估计很多的朋友不知道吧,下面小编来为各位介绍一篇yaml在python上的使用教程,希望文章对各位有用.

YAML是一种容易人类阅读、适合表示程序语言的数据结构、可用于不同程序间交换数据、支持泛型工具、支持串行处理、丰富的表达能力和可扩展性、易于使用的语言,YAML利用缩进或者是explicit indicatior(如{})来表示属性的嵌套,更为直观和simple.

一、YAML的格式

YAML的格式及特点如下:YAML使用可打印的Unicode字元,可使用UTF-8或UTF-16,使用空白字元为文件缩排来表示结构,不过不能使用跳格字元(TAB).

注解由井字号( # )开始,可以出现在一行中的任何位置,而且范围只有一行,也就是一般所谓的单行注解,每个清单成员以单行表示,并用短杠+空白( - )起始,或使用方括号( [ ] ),并用逗号+空白( , )分开成员。

每个杂凑表的成员用冒号+空白( : )分开键值和内容。或使用大括号( { } ),并用逗号+空白( , )分开。

杂凑表的键值可以用问号 ( ? )起始,用来明确的表示多个词汇组成的键值,字串平常并不使用引号,但必要的时候可以用双引号 ( " )或单引号 ( ' )框住。

使用双引号表示字串时,可用倒斜线( \ )开始的跳脱字元(这跟C语言类似)表示特殊字元,区块的字串用缩排和修饰词(非必要)来和其他资料分隔,有新行保留(preserve)(使用符号 | )或新行折叠(flod)(使用符号 > )两种方式。

在单一档案中,可用连续三个连字号(---)区分多个档案,另外,还有选择性的连续三个点号( ... )用来表示档案结尾,重复的内容可使从参考标记星号 ( * )复制到锚点标记( & ),指定格式可以使用两个惊叹号 ( !! ),后面接上名称。

档案中的单一文件可以使用指导指令,使用方法是百分比符号( % ),有两个指导指令在YAML1.1版中被定义:

%YAML 指导指令,用来识别文件的YAML版本.

%TAG 指导指令,被用在URI的字首标记,这个方法在标记节点的型态时相当有用.

YAML再使用逗号及冒号时,后面都必须接一个空白字元.

二、PyYAML的使用

1、安装

python下安装PyYAML模块可以使用YAML ,打开https://pypi.python.org/pypi/PyYAML下载,当前版本3.11 。pypi 站点上对该模块的描述如下:PyYAML features a complete YAML 1.1 parser, Unicode support, pickle support, capable extension API, and sensible error messages 。

可以连网的主机也可以通过pip install pyyaml 或easy_install pyymal 进行安装。

2、yaml.load与yaml.dump方法

该模块提供了一些方法,不过常用的方法只有两个yaml.load和yaml.dump,以下是一个版本相关的yaml 格式文件.

  1. [root@361wayyaml]#cattree.yaml
  2. treeroot:
  3. branch1:
  4. name:Node1
  5. branch1-1:
  6. name:Node1-1
  7. branch2:
  8. name:Node2
  9. branch2-1:
  10. name:Node2-1

yaml.load方法:

  1. #脚本内容
  2. [root@361wayyaml]#catload.py
  3. importyaml
  4. f=open('tree.yaml')
  5. dataMap=yaml.load(f)
  6. f.close()
  7. printdataMap
  8. #执行结果如下
  9. [root@361wayyaml]#pythonload.py
  10. {'treeroot':{'branch2':{'branch2-1':{'name':'Node2-1'},'name':'Node2'},'branch1':{'branch1-1':{'name':'Node1-1'},'name':'Node1'}}}

yuml.dump方法:

这里还承接上面的脚本,调用里面的dataMap 数据,将其保存一直新的yaml 文件,如下:

  1. #代码如下:
  2. f=open('newtree.yaml',"w")
  3. yaml.dump(dataMap,f)
  4. f.close()
  5. #newtree.yaml的结果如下
  6. [root@361wayyaml]#catnewtree.yaml
  7. treeroot:
  8. branch1:
  9. branch1-1:{name:Node1-1}
  10. name:Node1
  11. branch2:
  12. branch2-1:{name:Node2-1}
  13. name:Node2

除此之外,还有safe_load、safe_dump、load_all 等主法,具体可以通过pydoc yaml 进行查看.

三、yaml、xml与json

1、yaml 与xml

以下是同一内容,分别使用xml 语言标记与 yaml 语言标记:

  1. #xml标记两个site
  2. <site>
  3. <name>sina</name>
  4. <url>http://www.phpfensi.com</url>
  5. </site>
  6. <site>
  7. <name>google</name>
  8. <url>http://www.phpfensi.com</url>
  9. </site>
  10. #使用yaml标记两个site
  11. ---
  12. site:
  13. name:sina
  14. url:http://www.phpfensi.com
  15. ---
  16. site:
  17. name:google
  18. url:http://www.phpfensi.com
  19. #使用yaml标记两个site
  20. ---
  21. site:{name:sina,url:http://www.111cn.net}
  22. ---
  23. site:{name:google,url:http://www.111cn.net}

从读取查看的角度来看,有没有发现yaml 相对xml 语言的优势.

2、yaml 与 json

准确的说json 应该算是yaml 标准下的一个字集,通过python语句可以很方面的在两者之间进行转换.

a、转换YAML到JSON

  1. #python-c'importsys,yaml,json;json.dump(yaml.load(sys.stdin),sys.stdout,indent=4)'<file.yaml>file.json
  2. #!/usr/bin/envpython
  3. importyaml,json
  4. yml="""
  5. ---
  6. foo:bar
  7. """
  8. data=yaml.load(yml)
  9. json=json.dumps(data)
  10. print(json)

b、转换JSON到YAML

  1. #python-c'importsys,yaml,json;yaml.dump(json.load(sys.stdin),sys.stdout,default_flow_style=False)'<file.json>file.yaml
  2. #!/usr/bin/envpython
  3. importjson,yaml
  4. str='{"foo":"bar"}'
  5. data=json.loads(str)
  6. yml=yaml.safe_dump(data)
  7. print(yml)

:很多情况下,甚至可以直接将json后缀的文件改为yaml 后缀,使用yaml 语言直接解析.

四、yaml 在python语言中的应用

yaml 语言在很多优秀的python 程序中都有使用,比如运维工程师经常使用的两个自动化工作saltstack 与 Ansible,更多PyYAML 模块的用法,也可以查看其官方wiki 页.

相关广告
  • yaml在python上的使用教程详解 yaml在python上的使用教程详解 yaml在python上的使用教程详解
相关阅读

yaml在python上的使用教程详解

2019/10/10 17:45:18 | 谷歌SEO算法 | 黑猫SEO