zoukankan      html  css  js  c++  java
  • yaml&&json


    执行pip install pyyaml(而不是pip install yaml),后来才知道,python3.X只能使用
    pip install pyyaml 来安装


    yaml 语法:
    大小写敏感
    使用缩进表示层级关系
    缩进时不允许使用Tab,只允许使用空格
    缩进的空格数目不重要,只要相同层级的元素左对齐即可
    # 表示注释,从它开始到行尾都被忽略


    ymal:


    首先YAML中允许表示三种格式,分别是常量值,对象和数组

    对象
    使用冒号代表,格式为key: value。冒号后面要加一个空格:
    eg key: value


    可以使用缩进表示层级关系;
    key:

    child-key: value

    child-key2: value2

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

    - Java

    - LOL

    一个相对复杂的例子:
    companies:

    -

    id: 1
    name: company1

    price: 200W

    -

    id: 2
    name: company2

    price: 500W


    常量
    YAML中提供了多种常量结构,包括:整数,浮点数,字符串,NULL,日期,布尔,时间。

    boolean:

    - TRUE #true,True都可以
    - FALSE #false,False都可以
    f
    float:

    - 3.14
    - 6.8523015e+5 #可以使用科学计数法
    i
    int:

    - 123
    - 0b1010_0111_0100_1010_1110 #二进制表示
    null:

    nodeName: 'node'
    parent: ~ #使用~表示null
    s
    string:

    - 哈哈

    - 'Hello world' #可以使用双引号或者单引号包裹特殊字符
    - newline

    newline2 #字符串可以拆成多行,每一行会被转化成一个空格
    d
    date:

    - 2018-02-17 #日期必须使用ISO 8601格式,即yyyy-MM-dd
    d
    datetime:

    - 2018-02-17T15:02:31+08:00 #时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区


    一些特殊符号
    1,--- YAML可以在同一个文件中,使用---表示一个文档的开始;比如Springboot中profile的定义:
    2,... 和---配合使用,在一个配置文件中代表一个文件的结束:相当于在一个yaml文件中连续写了两个yaml配置项。
    3,!! YAML中使用!!做类型强行转换:
    eg string:

    - !!str 54321
    - !!str true
    4,引用。重复的内容在YAML中可以使用&来完成锚点定义,使用*来完成锚点引用,例如:
    hr:
    -
    - Mark McGwire
    -
    - &SS Sammy Sosa
    r
    rbi:
    -
    - *SS
    -
    - Ken Griffey

    使用起来非常简单,就像json、pickle一样,load、dump就足够我们使用了。
    import yaml

    yaml_str = """
    name: 灰蓝
    age: 0
    job: Tester
    """

    y = yaml.load(yaml_str)
    print y

    结果:{'job': 'Tester', 'age': 0, 'name': u'u7070u84dd'}


    import yaml

    python_obj = {"name": u"灰蓝",
    "age": 0,
    "job": "Tester"
    }

    y = yaml.dump(python_obj, default_flow_style=False)
    print y

    结果:
    age: 0
    job: Tester
    name: "u7070u84DD"


    1. 基本规则:
    大小写敏感
    使用缩进表示层级关系
    缩进时不允许使用Tab,只允许使用空格
    缩进的空格数目不重要,只要相同层级的元素左对齐即可
    # 表示注释,从它开始到行尾都被忽略


    2. yaml 转字典(注意yaml格式后面有空格)
    #test.yaml #下面格式读到Python里会是个dic
    name: 灰蓝
    age: 0
    job: Tester


    with open("test.yaml",'a',encoding='utf-8',) as fh:
    fh.write('abc')
    print(output)


    3. yaml 转列表(注意yaml格式’-‘后面有空格)
    yaml中支持列表或数组的表示,注意裂变中的每一个元素前面用符号 - 如下:
    #test.yaml
    #
    #下面格式读到Python里会是个list

    - 灰蓝
    - 0
    - Tester

    4. 复合结构(整个读出来的应该全部是列表及列表的元素,不存在列表和字典混合存在)
    字典和列表可以复合起来使用,注意这里使用 - 如下:
    # test.yaml
    #下面格式读到Python里是个list里包含dict
    -
    - name: 灰蓝

    age: 0
    job: Tester
    -
    - name: James

    age: 30


    5. 基本类型
    yaml中有以下基本类型:
    字符串
    整型
    浮点型
    布尔型
    null
    时间
    日期

    如果字符串没有空格或特殊字符,不需要加引号,但如果其中有空格或特殊字符,则需要加引号了

    这里要注意单引号和双引号的区别,单引号中的特殊字符转到Python会被转义,也就是到最后是原样输出了,双引号不会被Python转义,到最后是输出了特殊字符;

    import yaml

    y = yaml.load(file('test.yaml', 'r'))
    print y['str1']
    print y['str2']

    结果:
    Hello World
    Hello
    World


    6. 引用
    #test.yaml
    name: &name 灰蓝
    tester: *name

    输出:{'name': u'u7070u84dd', 'tester': u'u7070u84dd'}


    7. 强制转换


    str: !!str 3.14
    int: !!int "123"


    输出:{'int': 123, 'str': '3.14'}


    8. 分段

    ---
    name: James
    age: 20
    ---
    name: Lily
    age: 19

  • 相关阅读:
    安装一个Linux 罗晓杜
    基本正则表达 罗晓杜
    安装MySQL 罗晓杜
    复选框返回选中项ID到后台
    软件工程的理解
    作业一:计科131邵楠
    javascript中函数和方法的区别
    Javascript动画系列之 —— lightbox实现(一)
    如何让自己的javascript代码具有可维护性?
    javascript动画系列 —— 切换图片(原生)
  • 原文地址:https://www.cnblogs.com/wenshu/p/12258075.html
Copyright © 2011-2022 走看看