PythonのPyyamlモジュールの使用について詳しく説明します。


一、YAMLとは何ですか
YAMLは設定ファイルを書くための言語で、JSON形式よりずっと便利です。
YAML言語の設計目標は、人間が読み、書きやすいことです。
YAMLはXMLやJSONより軽いファイル形式で、シンプルで強いです。インデントによって構造を表現することができます。Pythonとよく似合いますか?
名前の通り、言語で作成したファイルをYAMLファイルといいます。PyYamlはPythonのYAMLファイル用の専用モジュールです。とても簡単に使えます。

   pip install pyyaml  #    py2,   pip install yaml
二、PyYamlの簡単な使用
使うのはとても簡単で、json、pickleのように、ロード、dumpは十分です。
ロード()例:オブジェクトを返す

import yaml

yaml_str = """
name:     
age: 1956
job: Singer
"""

y = yaml.load(yaml_str, Loader=yaml.SafeLoader)
print(y)
実行結果:
''name''一つの大河'、'age':1956、'job'''Singer''
ロード.all()の例:次世代を生成する
stringやファイルにいくつかのyamlの文書が含まれている場合、yaml.load_を使ってもいいです。allですべてのドキュメントを解析します。
ヤmltest.yamlファイルの内容:

---
name: qiyu
age: 20 
---
name: qingqing
age: 19 
yamlファイルを操作するtest.pyファイルは以下の通りです。

import yaml

with open("./yaml_test", 'r', encoding='utf-8') as ymlfile:
  cfg = yaml.load_all(ymlfile, Loader=yaml.SafeLoader)
  for data in cfg:
    print(data)
実行結果:
''name':'qiyu'、'age':'20歳''
''name':'qingqing'、'age':'19歳''
dump()例:pythonオブジェクトをyaml文書に生成する

import yaml

json_data = {'name': '    ',
       'age': 1956,
       'job': ['Singer','Dancer']}

y = yaml.dump(json_data, default_flow_style=False).encode('utf-8').decode('unicode_escape')
print(y)
実行結果:
メッセージ:1956
job:
-Singer
-ダンス
name:「一つの大河」
dump()を使ってパラメータに入ると、そのままyamlファイルに内容を書き込むことができます。

import yaml

json_data = {'name': '    ',
       'age': 1956,
       'job': ['Singer', 'Dancer']}
with open('./yaml_write.yaml', 'w') as f:
  y = yaml.dump(json_data, f)
  print(y)
内容を記入した後のyaml_write.yaml:
在这里插入图片描述
yaml.dump_all()例:複数のセグメントを一つのファイルに出力する

import yaml

obj1 = {"name": "river", "age": 2019}
obj2 = ["Lily", 1956]
obj3 = {"gang": "ben", "age": 1963}
obj4 = ["Zhuqiyu", 1994]

with open('./yaml_write_all.yaml', 'w', encoding='utf-8') as f:
  y = yaml.dump([obj1, obj2, obj3, obj4], f)
  print(y)

with open('./yaml_write_all.yaml', 'r') as r:
  y1 = yaml.load(r, Loader=yaml.SafeLoader)
  print(y1)
内容を記入した後のyaml_write_all.yaml:
在这里插入图片描述
なぜファイルに書き込んだ後のフォーマットには「-」が1つ付いているものと、「ー」が2つ付いているものがありますか?
なぜyamlファイルを読むフォーマットはListですか?
三、YAMLの文法規則とデータ構造
以上の4つの簡単な例を見て、YAML言語の基本文法をまとめます。
YAML基本文法規則は以下の通りです。
1、大文字と小文字は敏感です
2、インデントを使ってレベルの関係を表します。
3、インデント時はTabキーは使用できません。スペースのみ使用できます。
4、インデントされたスペースの数は重要ではなく、同じレベルの要素が左側に揃えばいいです。
5、コメントはこの文字から行末まで、解像度が無視されます。これはpythonのコメントと同じです。
6、リストの項目は「-」で表され、辞書のキーは「:」で区切られます。
文法のルールが分かりました。上の2つの質問に答えます。
1つの「-」を持つことは、異なるモジュール(単一の配列または辞書)を表し、2つの「-」を持つことは、配列中の要素が「-」で始まることに加え、異なるモジュールを表す「-」を加えることで、2つの「-」が現れます。
2、ヤmlファイルには複数のモジュール(複数の配列または辞書)が含まれていますので、読み取ったのはこれらのモジュールの1つのセットです。
3、ありますが、yamlファイルに辞書が1つしかない場合、読み取ったデータの種類も辞書です。
YAMLサポートのデータ構造は3つあります。
1、対象:キーパッドのセット
2、配列:一組は順序で並べられた値、シーケンス(sequence)またはリスト(list)
3、純量(scalars):文字列、ブール値、整数、浮動小数、Null、時間、日付などの単一の再分割できない値
サポートデータの例:
ヤmltest_data.yamlの内容:

str: "Big River"              #   
int: 1548                 #  
float: 3.14                #   
boolean: true               #   
None: null                #      ~      null
time: '2019-11-20T08:47:46.576701+00:00'    #   ,ISO8601 
date: 2019-11-20 16:47:46.576702        #   
操作コード:

import yaml
import datetime
import pytz

yaml_data = {
  "str": "Big River",
  "int": 1548,
  "float": 3.14,
  'boolean': True,
  "None": None,
  'time': datetime.datetime.now(tz=pytz.timezone('UTC')).isoformat(),
  'date': datetime.datetime.today()
}

with open('./yaml_test', 'w') as f:
  y = yaml.dump(yaml_data, f)
  print(y)

with open('./yaml_test', 'r') as r:
  y1 = yaml.load(r, Loader=yaml.SafeLoader)
  print(y1)
コンソール出力:
在这里插入图片描述
その他の文法規則
1、文字列にスペースや特殊文字がない場合は、引用符は必要ありませんが、スペースや特殊文字がある場合は、引用符が必要です。
在这里插入图片描述
2、引用
&和*は参照用です

name: &name SKP
tester: *name
実行結果:
{'name':'SKP'、'tester':'SKP''
3、強制変換
使え実現する

str: !!str 3.14
int: !!int "123"
実行結果:
{int':123,'str':'3.14''
4、セグメント
同じyamlファイルでは、「――」の3つの「-」を使って区切ります。このように複数の文書を一つのファイルに書くことができます。
例を挙げて上記のロード_を参照してくださいall()の例
四、pythonオブジェクトからyaml文書を生成する
1、yaml.dump()方法

import yaml
import os

def generate_yaml_doc(yaml_file):
  py_object = {'school': 'zhu',
         'students': ['a', 'b']}
  file = open(yaml_file, 'w', encoding='utf-8')
  yaml.dump(py_object, file)
  file.close()

current_path = os.path.abspath(".")
yaml_path = os.path.join(current_path, "generate.yaml")
generate_yaml_doc(yaml_path)
"""  
school: zhu
students:
- a
- b
"""
2、rumelモジュールのyaml方法を使って標準的なyaml文書を作成します。

import os
from ruamel import yaml   # pip3 install ruamel.yaml

def generate_yaml_doc_ruamel(yaml_file):
  py_object = {'school': 'zhu',
         'students': ['a', 'b']}
  file = open(yaml_file, 'w', encoding='utf-8')
  yaml.dump(py_object, file, Dumper=yaml.RoundTripDumper)
  file.close()

current_path = os.path.abspath(".")
yaml_path = os.path.join(current_path, "generate.yaml")
generate_yaml_doc_ruamel(yaml_path)
"""  
school: zhu
students:
- a
- b
"""
rumelモジュールでyamlメソッドを使ってyamlドキュメントを読みます。(使い方は別のimport yamlモジュールと一致します。)

import os
from ruamel import yaml

def get_yaml_data_ruamel(yaml_file):
  file = open(yaml_file, 'r', encoding='utf-8')
  data = yaml.load(file, Loader=yaml.Loader)
  file.close()
  print(data)

current_path = os.path.abspath(".")
yaml_path = os.path.join(current_path, "generate.yaml")
get_yaml_data_ruamel(yaml_path)
ここでPythonのPyyamlモジュールの使用についての記事を紹介します。PythonのPyyamlモジュールの内容については以前の記事を検索したり、次の関連記事を見たりしてください。これからもよろしくお願いします。