python yaml 配置文件的使用

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")
posted @ 2023-04-27 10:20  记不起的回忆  阅读(163)  评论(0)    收藏  举报