天天看點

Python—11.3、Yaml解析1、概念簡介2、文法規範3、Python操作

文檔目錄

  • 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

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 ===========================================