使用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)
'''