天天看點

簡單總結下yaml 的基本使用方法

使用yaml來寫配置檔案,和簡單的存儲資料使用,簡直友善的不要不要的,簡單總結下yaml 的基本使用方法

廢話不多說,直接上代碼,基本就兩個檔案

test.yaml

user: admin
pwd: 123
job:
  - teacher
  - nurese
  -
    test: hell0
n1: 52.10
#輸出:{'n1': 52.1}

n2: true 
n3: false    #不區分大小寫
#輸出:{'n2': True, 'n3': False}

# None用~表示
n4: ~ #輸出:{'n4': None}
n7: !!str true
#輸出:{'n7': 'true'}
excel:
  title: 
    - one
    - two
    - three
  data:
    - #data row 1
     - one_one
     - one_two
     - one_three
    - #data row 2
     - one_one
     - one_two
     - one_three

           

yaml_test.py

# -*- coding:utf-8 -*-
import yaml

def load_yaml(path):
    yaml.warnings({'YAMLLoadWarning':False}) 
    f=open(path,'r',encoding='utf-8')      #打開yaml檔案
    cfg=f.read()
    data=yaml.load(cfg)   
    return data

if __name__ == '__main__':
    arr=load_yaml('./test.yaml')
    print(arr)

           

以上兩個檔案,基本可以實作yaml的簡單實用,下面是将yaml封裝成一個類,實作讀寫yaml的功能

YamlUtil.py

# -*- coding:utf-8 -*-
import yaml
from string import Template

class YamlUtil:
    def __init__(self, yaml_file):
        self.yaml_file = yaml_file

    def set_yaml_path(self,yaml_file):
        self.yaml_file = yaml_file
        return self

    def read_yaml(self):
        with open(self.yaml_file, 'r', encoding='utf-8') as f:
            # 正常格式控制台輸出
            # value = yaml.load(f, Loader=yaml.FullLoader)
            # 原格式輸出
            value = f.read()

            temp = Template(value)
            # substitute替代者
            # safe_substitute可以讓不想比對的變量當正常的字元串使用
            res = temp.safe_substitute({'user': 'lily', 'psw': '123456'})
            yaml_data = yaml.safe_load(res)
            #print(res) 原樣輸出
            #print(yaml_data) #字典輸出
            return yaml_data

    #param write_data Dict
    def set_write_data(self,write_data):
        self.write_data=write_data
        return self

    def write_yaml(self,write_mode='a'):
        with open(self.yaml_file,write_mode,encoding='utf-8') as f:      #'a'代表持續寫入,‘w’代表覆寫寫入
            yaml.dump(self.write_data,f)
        print('well done')
        return self

    def load_yaml_all(path):
        #由于官方提示load方法存在安全漏洞,是以讀取檔案時會報錯。加上warning忽略,就不會顯示警告
        yaml.warnings({'YAMLLoadWarning':False}) 
        f=open(path,'r',encoding='utf-8')      #打開yaml檔案
        cfg=f.read()
        d=yaml.load_all(cfg)     #将資料轉換成python字典行駛輸出,存在多個檔案時,用load_all,單個的時候load就可以
        return d

    def load_yaml(path):
        #由于官方提示load方法存在安全漏洞,是以讀取檔案時會報錯。加上warning忽略,就不會顯示警告
        yaml.warnings({'YAMLLoadWarning':False}) 
        f=open(path,'r',encoding='utf-8')      #打開yaml檔案
        cfg=f.read()
        d=yaml.load(cfg)     #将資料轉換成python字典行駛輸出,存在多個檔案時,用load_all,單個的時候load就可以
        return d

if __name__ == '__main__':
    write_data={
        "url":'https://www.baidu.com/',
        "driver":['ie','chrome','firfox',{'titile':'hello','test':[1,2,3,4]}],
        "test":'test',
    }
    write_data=[1,2,3,4,[{'1':1,'2':2}]]
    #yal.set_yaml_path("./test2.yaml").set_write_data(write_data).write_yaml('w').read_yaml()
    yal=YamlUtil('./test2.yaml')
    yal_data=yal.set_write_data(write_data).write_yaml("w").read_yaml()
    print(yal_data)
    
    '''
     arr=load_yaml('./test.yaml')
    print(arr)
    '''