加入收藏 | 设为首页 | 会员中心 | 我要投稿 广西网 (https://www.guangxiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

yaml在python上的使用教程详情

发布时间:2022-06-15 04:08:36 所属栏目:教程 来源:互联网
导读:yaml在python上的使用估计很多的朋友不知道吧,下面小编来为各位介绍一篇yaml在python上的使用教程,希望文章对各位有用. 一、YAML的格式 YAML的格式及特点如下:YAML使用可打印的Unicode字元,可使用UTF-8或UTF-16,使用空白字元为文件缩排来表示结构,不过不能使
  yaml在python上的使用估计很多的朋友不知道吧,下面小编来为各位介绍一篇yaml在python上的使用教程,希望文章对各位有用.
 
  一、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 格式文件.
 
  [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与json
 
  1、yaml 与xml
 
  以下是同一内容,分别使用xml 语言标记与 yaml 语言标记:
 
  # xml标记两个site
  
  <site>
  
      <name>sina</name>
  
      <url>http://www.phpfensi.com </url>
  
  </site>
  
  <site>
  
      <name>google</name>
  
      <url>http://www.phpfensi.com</url>
  
  </site>
  
  # 使用yaml标记两个site
  
  ---
  
  site:
  
      name: sina
  
      url : http://www.phpfensi.com  
  
  ---
  
  site:
  
      name: google
  
      url : http://www.phpfensi.com
  
  # 使用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.yaml > 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.json > 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 语言直接解析.

(编辑:广西网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!