前言

YAML是一个可读性高,用来表达数据序列化的格式。YAML参考了其他多种语言,包括:C语言、Python、Perl,并从XML、电子邮件的数据格式(RFC 2822)中获得灵感。Clark Evans在2001年首次发表了这种语言,另外Ingy döt Net与Oren Ben-Kiki也是这语言的共同设计者。当前已经有数种编程语言或脚本语言支持(或者说解析)这种语言。
YAML是"YAML Ain’t a Markup Language"(YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言),但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名。

功能特点:
YAML的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)。尽管它比较适合用来表达层次结构式(hierarchical model)的数据结构,不过也有精致的语法可以表示关系性(relational model)的数据。由于YAML使用空白字符和分行来分隔数据,使得它特别适合用grep/Python/Perl/Ruby操作。其让人最容易上手的特色是巧妙避开各种封闭符号,如:引号、各种括号等,这些符号在嵌套结构时会变得复杂而难以辨认 。

使用注意:

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

Python中yaml文件数据操作

下载、安装

方式一
首先检查自己安装的python版本,然后在网页上下载对应的版本
下载地址:https://pyyaml.org/wiki/PyYAML

python读取yaml文件转义 python读写yaml文件_python读取yaml文件转义


将下载的.whl文件放在python/scripts路径下,并在该路径下执行命令:

pip install {xxx}.whl

验证安装是否成功,导入不报错说明安装成功:

python读取yaml文件转义 python读写yaml文件_数据_02


方式二

pip install pyyaml

python引入使用:

import yaml

一、读取yaml文件数据

class Yaml:
    # 初始化,判断YAML文件路径是否能正确获取文件
    def __init__(self,yaml_path):
        if os.path.exists(yaml_path):
            self.yaml = yaml
            self.yaml_path = yaml_path
        else:
            raise Exception("该目录下未读取到yaml文件,请重新检查路径是否正确!")

config.yaml文件中内容如下:

python读取yaml文件转义 python读写yaml文件_缩进_03

if __name__ == "__main__":
    yaml_path = r'..\config\config.yaml'
    y = Yaml(yaml_path)
    result = y.read_yaml()
    print(result)

运行结果:

python读取yaml文件转义 python读写yaml文件_YAML_04

二、写入数据到yaml文件中
1、覆盖写入
会将新的数据写入yaml文件,覆盖掉原有文件中的所有数据。

# 覆盖写入YAML文件数据方法
def write_yaml(self,data):
    try:
        with open(self.yaml_path,encoding='utf-8',mode='w') as f:
            self.yaml.dump(data=data,stream=f,allow_unicode=True)
    except Exception as e:
        raise e
if __name__ == "__main__":
    yaml_path = r'..\config\config.yaml'
    y = Yaml(yaml_path)
    data = [{'D': 4, 'E': 5, 'F': 6}]
    y.write_yaml(data)

运行结果:

python读取yaml文件转义 python读写yaml文件_YAML_05

2、追加写入
不覆盖原有数据,在原有数据后追加写入新的数据。
只需要更改写入模式即可,moed=‘a’:

# 追加写入YAML文件数据方法
def write_yaml(self, data):
    try:
        with open(self.yaml_path, encoding='utf-8', mode='a') as f:
            self.yaml.dump(data=data, stream=f, allow_unicode=True)
    except Exception as e:
        raise e
if __name__ == "__main__":
    yaml_path = r'..\config\config.yaml'
    y = Yaml(yaml_path)
    data = [{'外比巴卜': 7, '啊uGood马来西亚': 8}]
    y.write_yaml(data)
    result = y.read_yaml()

运行结果:

python读取yaml文件转义 python读写yaml文件_数据_06