yaml语法

一、简介

yaml基本语法规则:

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进时不允许使用Tab键,只允许使用空格。
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
  • #表示注释,从这个字符一直到行尾,都会被解析器忽略,这个和python的注释一样

YAML 支持的数据结构有三种:

  • 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
  • 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
  • 纯量(scalars):单个的、不可再分的值

注意:

冒号后面,要跟一个空格。

 二、基本类型(数字/字符串)

字符串默认不使用引号表示(也可以使用引号).

如果字符串之中包含空格或特殊字符,需要放在引号之中.

 yaml -> json:

age: 18
score: 98.5
name: 张三
firstname: "jack ma"
{
  "age": 18,
  "score": 98.5,
  "name": "张三",
  "firstname": "jack ma"
}

三、数组/列表

数组/列表,有2种写法。

 yaml -> json:

subjects: ["语文", "数学", "英语"]
language: [Java, python, C++]
fruits:
 - banana
 - apple
 - orange
{
  "subjects": [
    "语文",
    "数学",
    "英语"
  ],
  "language": [
    "Java",
    "python",
    "C++"
  ],
  "fruits": [
    "banana",
    "apple",
    "orange"
  ]
}

数组嵌套 

 yaml -> json:

food:
 - ["青苹果", "红苹果", "黄苹果"]
 - - 黄瓜
   - 西瓜
   - 冬瓜
 - - 小麦
   - 大米
   - 玉米
{
  "food": [
    [
      "青苹果",
      "红苹果",
      "黄苹果"
    ],
    [
      "黄瓜",
      "西瓜",
      "冬瓜"
    ],
    [
      "小麦",
      "大米",
      "玉米"
    ]
  ]
}

四、对象 

 yaml -> json:

person:
 name: 张三
 age: 18
 gender: 男
{
  "person": {
    "name": "张三",
    "age": 18,
    "gender": "男"
  }
}

五、变量的使用(锚点& 与 引用*)

为了保持内容的简洁,避免过多重复的定义,YAML 提供了由锚点标签“&”引用标签“*”组成的语法。

对于重复的数据,可以单独写到yaml文件的开头位置,其它的地方用到的可以用*引用。

&用来建立锚点,<<表示合并到当前数据,*用来引用锚点。 

 yaml -> json:

address: &MyAddress
  city: beijing
  street: tuanjiehu
  number: 1004

Person:
  name: zhangsan
  age: 18
  <<: *MyAddress
{
  "address": {
    "city": "beijing",
    "street": "tuanjiehu",
    "number": 1004
  },
  "Person": {
    "name": "zhangsan",
    "age": 18,
    "city": "beijing",
    "street": "tuanjiehu",
    "number": 1004
  }
}

六、复合结构

列表中包含字典 :

 yaml -> json:

students:
  - name: zhangsan
    age: 18
    gender: 男
  - name: lisi
    age: 20
    gender: 女
{
  "students": [
    {
      "name": "zhangsan",
      "age": 18,
      "gender": "男"
    },
    {
      "name": "lisi",
      "age": 20,
      "gender": "女"
    }
  ]
}

字典中包含列表

 yaml -> json:

students:
    name: 
      - zhangsan
      - sili
      - wangwu
    age: 
      - 18
      - 17
      - 20
    scores:
      - 89
      - 98
      - 100
{
  "students": {
    "name": [
      "zhangsan",
      "sili",
      "wangwu"
    ],
    "age": [
      18,
      17,
      20
    ],
    "scores": [
      89,
      98,
      100
    ]
  }
}

七、Python读取yaml文件

pip3 install pyyaml

先用open方法读取文件数据,再通过load方法转成字典,这个load跟json里面的load是相似的

# coding:utf-8

import yaml


def read(path):
    with open(path, 'r') as file:
        data = file.read()
        # result = yaml.load(data)
        result = yaml.load(data, Loader=yaml.FullLoader)
        return result


if __name__ == '__main__':
    result = read('test.yaml')
    print(result)

 

你可能感兴趣的:(Python,python)