文檔目錄
- 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}
- 複雜組合:
# 配置環境資訊和輸出對象
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:
B:yamlConf = yaml.full_load(f.read())
C:yamlConf = yaml.safe_load(f.read())
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 ===========================================