Python操做Yaml文件

最近開始使用Python3.x,全部從此無特殊說明,Python表明的就是Python3.x node

最近在看代碼時發現有人用Yaml —— Yet Another Markup Language :另外一種標記語言python

好奇,就拿來試試。但願後續的項目中能夠嘗試實踐一下。linux

 簡介

  編程免不了要寫配置文件,怎麼寫配置也是一門學問。編程

   YAML 是專門用來寫配置文件的語言,很是簡潔和強大,遠比 JSON 格式方便。api

   YAML在python語言中有PyYAML安裝包。數組

   YAML 語言(發音 /ˈjæməl/ )的設計目標,就是方便人類讀寫。它實質上是一種通用的數據串行化格式。數據結構

    它的基本語法規則以下:app

    一、大小寫敏感ui

    二、使用縮進表示層級關係spa

    三、縮進時不容許使用Tab鍵,只容許使用空格。

    四、縮進的空格數目不重要,只要相同層級的元素左側對齊便可

    五、# 表示註釋,從這個字符一直到行尾,都會被解析器忽略,這個和python的註釋同樣

    YAML 支持的數據結構有三種:

    一、對象:鍵值對的集合,又稱爲映射(mapping)/ 哈希(hashes) / 字典(dictionary)

    二、數組:一組按次序排列的值,又稱爲序列(sequence) / 列表(list)

    三、純量(scalars):單個的、不可再分的值。字符串、布爾值、整數、浮點數、Null、時間、日期

1. 安裝包

pip install pyyaml

 2. 使用yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: linux-node02
  namespace: yaml-demo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: podinfo
  template:
    metadata:
      labels:
        app: podinfo
    spec:
      containers:
      - image: quay.io/stefanprodan/podinfo:0.3.0
        name: podinfod
        ports:
        - containerPort: 9898

3. 獲取配置文件信息

import yaml
import os

# 獲取當前路徑
filePath = os.path.dirname(__file__)
print(filePath)

# 獲取當前文件的絕對路徑
fileNamePath = os.path.split(os.path.realpath(__file__))[0]
print(fileNamePath)

# 獲取配置文件的路徑
yamlPath = os.path.join(fileNamePath,'config.yaml')
print(yamlPath)

# 修改yaml配置
with open(yamlPath,'r',encoding='utf-8') as f:
    # print(f.read())
    result = f.read()
    x = yaml.load(result,Loader=yaml.FullLoader)
    print(type(x))
    print(x)
C:\Users\yulianhui\AppData\Local\Programs\Python\Python36\python.exe D:/dev/PYSCRIPTS/yaml配置文件/s1.py
D:/dev/PYSCRIPTS/yaml配置文件
D:\dev\PYSCRIPTS\yaml配置文件
D:\dev\PYSCRIPTS\yaml配置文件\config.yaml
<class 'dict'>
{'apiVersion': 'apps/v1', 'kind': 'Deployment', 'metadata': {'name': 'linux-node02', 'namespace': 'yaml-demo'}, 'spec': {'replicas': 1, 'selector': {'matchLabels': {'app': 'podinfo'}}, 'template': {'metadata': {'labels': {'app': 'podinfo'}}, 'spec': {'containers': [{'image': 'quay.io/stefanprodan/podinfo:0.3.0', 'name': 'podinfod', 'ports': [{'containerPort': 9898}]}]}}}} 

4. 修改配置參數

import yaml
import os

# 獲取當前路徑
filePath = os.path.dirname(__file__)
print(filePath)

# 獲取當前文件的絕對路徑
fileNamePath = os.path.split(os.path.realpath(__file__))[0]
print(fileNamePath)

# 獲取配置文件的路徑
yamlPath = os.path.join(fileNamePath,'config.yaml')
print(yamlPath)

# 修改yaml配置
with open(yamlPath,'r',encoding='utf-8') as f:
    # print(f.read())
    result = f.read()
    x = yaml.load(result,Loader=yaml.FullLoader)
    print(type(x))
    print(x)
    print(x['metadata']['name'])

    # 修改的值
    x['metadata']['name'] = 'linux-node02'
    print(x)
    with open(yamlPath,'w',encoding='utf-8') as w_f:
        # 覆蓋原先的配置文件
        yaml.dump(x,w_f)
相關文章
相關標籤/搜索