yaml介绍
yaml的英文名称是Yet Another Markup Language,直译过来就是标记语言。
yaml用的比较多的地方就是写配置文件,比如yaml配置文件在Kubernetes用的就非常广泛,学Kubernetes必须要先学yaml文件格式。
yaml的基本语法:
- 大小写敏感
- 使用缩进表示层级关系
- 缩进时不允许使用Tab键,只允许使用空格。
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
- ‘#’表示注释,从这个字符一直到行尾,都会被解析器忽略,这个和python的注释一样
数据类型
-
对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary),对象的一组键值对,使用冒号结构表示。
- code: name name: name data_type: varchar field_type: varchar(100)
或
hash: { name: Steve, foo: bar }
-
数组:一组按次序排列的值,又称为序列(sequence) / 列表(list),是由一组连词线(-)开头的行
values: - 启用 - 停用
或
animal: [Cat, Dog]
-
纯量(scalars):单个的、不可再分的值,如字符串、布尔值、整数等
加载和保存yaml
-
加载:
函数yaml.load将一个YAML文档转换为一个Python对象。
yaml.load接受一个字节字符串、一个Unicode字符串、一个开放的二进制文件对象或一个开放的文本文件对象。
字节串或文件必须使用utf-8、utf-16-be或utf-16-le编码。yaml.load(""" - Hesperiidae - Papilionidae - Apatelodidae - Epiplemidae """) ['Hesperiidae', 'Papilionidae', 'Apatelodidae', 'Epiplemidae']
-
保存
yaml.dump函数接受一个Python对象并生成一个YAML文档。print(yaml.dump({'name': 'Silenthand Olleander', 'race': 'Human', 'traits': ['ONE_HAND', 'ONE_EYE']})) name: Silenthand Olleander race: Human traits: [ONE_HAND, ONE_EYE]
- 注意
yaml.dump接受第二个可选参数,它必须是一个打开的文本或二进制文件。
在这种情况下,yaml.dump将把产生的YAML文档写入文件中。否则,yaml.dump将返回生成的文档。stream = file('document.yaml', 'w') yaml.dump(data, stream) # 将data写入到document.yaml print(yaml.dump(data))
安装
pip install pyyaml
案例
import os
import yaml
import datetime
def get_main_path(file, parent_number=0):
"""
:param file:对应文件
:param parent_number:层级
:return: 对应文件父级目录 或当前目录
"""
self_path = os.path.abspath(file)
for i in range(parent_number):
self_path = os.path.dirname(self_path)
return self_path
class Config(object):
def __init__(self, path):
self._path = path
self._config = {}
self._envConfig = {}
def load(self):
config = yaml.load(open(self._path, encoding='utf-8'), Loader=yaml.FullLoader)
self._config = config
self._envConfig = config.get(config.get("env"))
return self
def getServerName(self):
return self._config.get("name")
def getPostgresqlDB(self):
return self._envConfig.get("db")
标签:name,配置文件,python,self,yaml,._,path,dump
From: https://www.cnblogs.com/clearheart/p/17358191.html