• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    简单介绍Python的第三方库yaml

    一、yaml基本介绍

    yaml是Python的第三方库。YAML is a human friendly data serialization standard for all programming languages(YAML是一个对所有编程语言都很友好的数据序列化标准)。
    但为了强调该语言以数据为中心,而不是以标记语言为重点,而用返璞词重新命名。它是一种直观的能够被电脑识别的数据序列化格式,是一种可读性高且容易被人类阅读、容易和脚本语言(不仅仅是Python)交互,用于表达资料序列的编程语言。YAML语言的本质是 一种通用的数据串行化格式。

    二、适用场景

    三、基本的语法规则

    四、YAML支持的三种数据结构

    4.1 对象

    使用冒号代表,格式为 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]。

    4.2 数组

    使用一个短横线 加一个空格代表一个数组项:

    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}]

    4.2.1 对象和数组

    可结合使用,形成复合结构

    languages:
     - Ruby
     - Perl
     - Python 
    websites:
     YAML: yaml.org 
     Ruby: ruby-lang.org 
     Python: python.org 
     Perl: use.perl.org

    4.3 纯量

    纯量是最基本的、不可再分的值。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连接,最后使用+代表时区
    

    4.4 还有一些特殊符号

    4.4.1 — YAML可在同一个文件中,使用—表示一个文档的开始

    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.
    

    4.4.2 …和—配合使用,在一个配置文件中代表一个的结束

    ---
    time: 19:13:09
    player: Tim
    action: strike
    ...
    ---
    time: 20:14:45
    player: Lily
    action: grand
    ...

    此例相当于在一个yaml文件中连续写了两个yaml配置项。

    4.4.3 YAML中使用!!做类型强行转换

    string:
      - !!str 123456
      - !!str true

    相当于将数字和布尔类型强转为字符串(允许转换的类型还有很多)。

    4.4.4 > 在字符串中表示折叠换行;| 保留换行。这两个符号是YAML中字符串经常使用的符号

    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

    4.4.5 引用。重复的内容在YAML中可使用来完成锚点定义,用*来完成锚点引用

    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须写在同一行。

    4.4.6 合并内容。主要是和锚点配合使用,可将一个锚点内容直接合并到一个对象中

    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}

    有了合并,我们就可以在配置中,把相同的基础配置抽取出来,在不同的子配置中合并引用即可。

    五、实战

    5.1 安装yaml

    yaml包名是 pyyaml,但导入是yaml。

    5.2 Python使用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))
    

    其中,最重要的两个方法:

    到此这篇关于简单介绍Python的第三方库yaml的文章就介绍到这了,更多相关Python库yaml内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • python 如何把docker-compose.yaml导入到数据库相关条目里
    • python excel和yaml文件的读取封装
    • python使用yaml 管理selenium元素的示例
    • Python自动化测试中yaml文件读取操作
    • Python读取yaml文件的详细教程
    • 使用python脚本自动生成K8S-YAML的方法示例
    • Python基于yaml文件配置logging日志过程解析
    • Python使用pyyaml模块处理yaml数据
    上一篇:教你如何使用Python实现二叉树结构及三种遍历
    下一篇:总结Python使用过程中的bug
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    简单介绍Python的第三方库yaml 简单,介绍,Python,的,第三方,