Python—11.3、Yaml解析

文档目录

  • 1、概念简介
  • 2、语法规范
    • 2.1、配置规范
    • 2.2、数据类型:
  • 3、Python操作
    • 3.1、代码实现
    • 3.2、层级解析

1、概念简介

  • Yaml

YAML是“YAML Is not markup language”的缩写形式,是一种数据序列化语言;其文件扩展名为 ~.yml;

2、语法规范

语法参考:https://www.yiibai.com/yaml/

2.1、配置规范

  • 注释规范

使用 #作为注释开始,YAML中只有行注释。

  • 语法规范

1)配置大小写敏感;
2)使用缩进代表层级关系;
3)缩进只能使用空格,不能使用TAB,不要求空格个数,只需要相同层级左对齐(一般2个或4个空格);

2.2、数据类型:

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

1)对象:格式为key: value,冒号后面要加一个空格:

key: value

2)数组:完整配置:

# 这是一个yaml配置文件

# 常规对象语法
mysql_A:
  host : 77.77.77.77
  port : 5432
  dbname : db_name_a
  user : user_name
  passwd : password_a

# 流式(flow)语法表示对象
oracle_B: {host : 99.99.99.99, port : 1521, dbname : db_name_b, user : user_name, passwd : password_b}
  1. 复杂组合:
# 配置环境信息和输出对象

target_db:
  mainFlag: True
  dbType: oracle
  host: xx.xx.xx.xx
  port: xxxx
  dbsid: xxxx
  username: xxx
  password: xxx




output_object:
  target_list:
      name: t_parse_object_frompdm
      stru: [object_name, object_type, object_comments, object_ddl, creationdate, creator, modificationdate, modifier, sc_sj]
  target_columns:
      name: t_parse_columns_frompdm
      stru: [object_name, column_name, column_id, uk_flag, data_type, data_length, data_precision, data_scale, nullable, column_comments, sc_sj]


3、Python操作

类库简介:https://pyyaml.org/wiki/PyYAMLDocumentation

Python解析 yaml文件依赖 pyyaml库,对应的模块为 yaml

模块安装:

pip install pyyaml
pip show pyyaml

3.1、代码实现

# coding=utf-8
"""
@DevTool  : PyCharm
@Author   : xxx
@DateTime : 2022/5/20 11:28
@FileName : parseYaml_demo.py
"""
import os.path

import yaml

pwd_path = os.path.abspath(".")
file_path = os.path.join(pwd_path, "dbEnvConf.yaml")

with open(file_path,mode="r",encoding="utf-8") as f:
    yamlConf = yaml.load(f.read(), Loader=yaml.FullLoader)

    print(yamlConf)

输出结果

D:\SoftWare\Python\python.exe E:/PythonProject/FileOperTest/parseYaml_demo.py
{'mysql_A': {'host': '77.77.77.77', 'port': 5432, 'dbname': 'db_name_a', 'user': 'user_name', 'passwd': 'password_a'}, 'oracle_B': {'host': '99.99.99.99', 'port': 1521, 'dbname': 'db_name_b', 'user': 'user_name', 'passwd': 'password_b'}}

Process finished with exit code 0
  • load 方式
    A:yamlConf = yaml.full_load(f.read())
    B:yamlConf = yaml.safe_load(f.read())
    C:yamlConf = yaml.load(f.read(), Loader=yaml.CLoader)

说明:以上 几种方式都可以实现 yaml 文件到 dict 格式对象的转换和加载;

3.2、层级解析

  • target_list_name = yamlConf["output_object"]["target_list"]["name"]
  • target_list_stru = yamlConf["output_object"]["target_list"]["stru"]
    说明:此处可以将解析后的对象按照字典的形式进行取值;
    =========================================== over ===========================================

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