# yaml的认识
yaml另一种标记语言。yaml 是专门用来写配置文件的语言,非常简洁和强大,之前用ini也能写配置文件,看了yaml后,发现这个更直观,更方便,有点类似于json格式。
1.yaml的基本语法规则:
- 大小写敏感
- 使用缩进表示层级关系
- 缩进时不允许使用Tab键,只允许使用空格。
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
- #表示注释,从这个字符一直到行尾,都会被解析器忽略,这个和python的注释一样。
2.yaml支持的数据结构有三种:
- 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
- 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
- 纯量(scalars):单个的、不可再分的值。字符串、布尔值、整数、浮点数、Null、时间、日期。
3.yaml的写法:
键值对:
1.yaml里面的键值对,也就是python里面的字典(dict)数据类型
# yaml
username: administrator
password: 123456
# python3.8 { "username": "administrator", "password": "123456", }
2.字典嵌套字典
# yaml
userinfo:
username: administrator
password: 123456
# python3.8 "userinfo": { "username": "administrator", "password": "123456", }
Python读取yaml文件,先用open方法读取文件数据,再通过load方法转成字典,这个load跟json里面的load是相似的
# coding:utf-8 import yaml import os # 获取当前脚本所在文件夹路径 curPath = os.path.dirname(os.path.realpath(__file__)) # 获取yaml文件路径 yamlPath = os.path.join(curPath, "test.yaml") # open方法打开直接读出来 f = open(yamlPath, 'r', encoding='utf-8') cfg = f.read() print(type(cfg)) # 读出来是字符串 print(cfg) d = yaml.load(cfg) # 用load方法转字典 print(d) print(type(d))
序列(list)
数字读出来是int/float类型
- administrator1: 333333 - administrator2: 111111 - administrator3: 222222
# python3.8 [{'administrator1': 333333}, {'administrator2': 111111}, {'administrator3': 222222}]
混合使用(list嵌套dict // dict嵌套list)
1.list嵌套dict
- user: administrator1 psw: '333333' - user: administrator2 psw: '111111' - user: administrator3 psw: '222222'
# python3.8 [{'user': 'administrator1', 'psw': '333333'}, {'user': 'administrator2', 'psw': '111111'}, {'user': 'administrator3', 'psw': '222222'}]
2.dict嵌套list
userinfo1: - administrator1 - '333333' userinfo2: - administrator2 - '111111' userinfo3: - administrator3 - '222222'
# python3.8 {'userinfo1': ['administrator1', '333333'], 'userinfo2': ['administrator2', '111111'], 'userinfo3': ['administrator3', '222222']}
# ini的认识
---实战经历
[capture_base] Face_min_px=80 Face_max_px=1000 Skin_threshold=0.1 Capture_module=离开后抓拍 Upload_threshold=0 Definition_filter=0.00 Upload_way=人脸 Occlusion_face=0.10
def operate_capture_config(self): config = configparser.RawConfigParser() config.read(cfg3, encoding='utf-8') item = config.items("capture_base") self.MyFace_min_px = item[0][1] self.MyFace_max_px = item[1][1] self.MySkin_threshold = item[2][1] self.MyCapture_module = item[3][1] self.MyUpload_threshold = item[4][1] self.MyDefinition_filter = item[5][1] self.MyUpload_way = item[6][1] self.MyOcclusion_face = item[7][1] return self.MyFace_min_px, self.MyFace_max_px, self.MySkin_threshold, self.MyCapture_module, self.MyUpload_threshold, self.MyDefinition_filter, self.MyUpload_way, self.MyOcclusion_face