Python操作Yamlファイル

10929 ワード

最近Python 3を使い始めました.x,今後は特に説明はないが,PythonはPython 3を代表する.x 
最近コードを見ているとYaml-Yet Another Markup Language:別のタグ言語を使う人がいることがわかりました
好奇心があれば、持ってきてみてください.後続のプロジェクトで実践してみてほしい.
概要
プログラミングはプロファイルを書くのが避けられないし、どのようにプロファイルを書くかも学問です.
YAMLはプロファイルを書くための言語で、非常に簡潔で強力で、JSONフォーマットよりはるかに便利です.
YAMLはpython言語にPyYAMLインストールパッケージがあります.
YAML言語(発音/ˈjæməl/)の設計目標は,人間の読み書きを容易にすることである.実質的には汎用的なデータシリアル化フォーマットです.
基本的な構文規則は次のとおりです.
1、大文字と小文字が敏感
2、階層関係をインデントで表す
3、インデント時にTabキーは使用できません.スペースのみ使用できます.
4、インデントされたスペースの数は重要ではありません.同じレベルの要素が左側に揃えばいいです.
5、#はコメントを表し、この文字から行末まで解析器に無視されます.これはpythonのコメントと同じです.
YAMLがサポートするデータ構造は3種類あります.
1、オブジェクト:キー値ペアの集合で、マッピング/ハッシュ/辞書(dictionary)とも呼ばれる
2、配列:シーケンス/リスト(list)と呼ばれる順序で並べられた値のセット
3、純量(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)

 
転載先:https://www.cnblogs.com/supery007/p/11263702.html