YAML详解

1.yaml格式

  • 以.yml格式为后缀

  • 键值对使用冒号结构表示 key: value,冒号后面要加一个空格

2.yaml的基本语法

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进不允许使用tab,只允许空格
  • 缩进的空格数不重要,只要相同层级的元素左对齐即可
  • '#'表示注释

3.yaml的数据类型

  • 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)

在这里插入图片描述

对象键值对使用冒号结构表示 key: value,冒号后面要加一个空格。也可以使用 key:{key1: value1, key2: value2, …}。

  • 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)

在这里插入图片描述

在这里插入图片描述

以 - 开头的行表示构成一个数组:如上的可以表示为:

Student: [{id: 1,name: zhangsan,score: 98},{id: 2,name: lisi,score: 96}]

复合结构:

在这里插入图片描述

转换为json格式如下:

	{
	    key: {
	        key1: value1,
	        key2: value2
	    },
	
	    Student: [{id: 1,name: zhangsan,score: 98},{id: 2,name: lisi,score: 96}]
	}

  • 纯量(scalars):单个的、不可再分的值

3.yaml使用

3.1 如何导入yaml

使用import yaml

  • python3中必须先安装pyyaml模块,使用命令为pip install pyyaml
  • python2中安装yaml模块,使用命令pip install yaml

3.2 具体方法

  • yaml.load(f)

作用是用来将YAML文档转化成Python对象

yaml文件如下图:

在这里插入图片描述

        with open(yaml_file, 'r') as fh:
            conf_yaml = yaml.load(fh,Loader=yaml.Loader)
		print(conF_yaml)

结果:

{'name': 'zhangsan', 'age': 15, 'score': [{'English': 90}, {'Chinese': 92}, {'Math': 100}]}
  • yaml.load_all(f)

返回yaml文件中所有的yaml文档的对象生成一个迭代器,再使用for打印出来

yaml文件如下图:

在这里插入图片描述

yaml文件如下:

       fh = open(yaml_file, 'r',encoding='utf-8')
       confs_yaml_mulit = yaml.load_all(fh,Loader=yaml.Loader)#读取文件,并且转换为字典形式存放
       for i in confs_yaml_mulit:
           print(i)

结果:

{'name': 'zhangsan', 'age': 15, 'score': [{'English': 90}, {'Chinese': 92}, {'Math': 100}]}
{'name': 'lisi', 'age': 18, 'score': [{'English': 98}, {'Chinese': 90}, {'Math': 80}]}
  • yaml.dump(c,f)

将一个python对象生成为yaml文档,存放在f中

    obj1 = {"name": "James", "age": 20}

    with open('../cfg/test.yaml', 'w') as f:
        yaml.dump(obj1,f)

生成的test.yaml文件如下:

在这里插入图片描述

  • yaml.dump_all(c,f)

将多个python对象生成为yaml文档,存放在f中

    obj1 = {"name": "James", "age": 20}
    obj2 = ["Lily", 19]

    with open('../cfg/test.yaml', 'w') as f:
        yaml.dump_all([obj1, obj2], f)

生成的test.yaml文件如下:

在这里插入图片描述

发布了100 篇原创文章 · 获赞 42 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/Hh20161314/article/details/104351224
今日推荐