PythonのPyyamlモジュールの使用について詳しく説明します。
一、YAMLとは何ですか
YAMLは設定ファイルを書くための言語で、JSON形式よりずっと便利です。
YAML言語の設計目標は、人間が読み、書きやすいことです。
YAMLはXMLやJSONより軽いファイル形式で、シンプルで強いです。インデントによって構造を表現することができます。Pythonとよく似合いますか?
名前の通り、言語で作成したファイルをYAMLファイルといいます。PyYamlはPythonのYAMLファイル用の専用モジュールです。とても簡単に使えます。
使うのはとても簡単で、json、pickleのように、ロード、dumpは十分です。
ロード()例:オブジェクトを返す
''name''一つの大河'、'age':1956、'job'''Singer''
ロード.all()の例:次世代を生成する
stringやファイルにいくつかのyamlの文書が含まれている場合、yaml.load_を使ってもいいです。allですべてのドキュメントを解析します。
ヤmltest.yamlファイルの内容:
''name':'qiyu'、'age':'20歳''
''name':'qingqing'、'age':'19歳''
dump()例:pythonオブジェクトをyaml文書に生成する
メッセージ:1956
job:
-Singer
-ダンス
name:「一つの大河」
dump()を使ってパラメータに入ると、そのままyamlファイルに内容を書き込むことができます。
yaml.dump_all()例:複数のセグメントを一つのファイルに出力する
なぜファイルに書き込んだ後のフォーマットには「-」が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の内容:
その他の文法規則
1、文字列にスペースや特殊文字がない場合は、引用符は必要ありませんが、スペースや特殊文字がある場合は、引用符が必要です。
2、引用
&和*は参照用です
{'name':'SKP'、'tester':'SKP''
3、強制変換
使え実現する
{int':123,'str':'3.14''
4、セグメント
同じyamlファイルでは、「――」の3つの「-」を使って区切ります。このように複数の文書を一つのファイルに書くことができます。
例を挙げて上記のロード_を参照してくださいall()の例
四、pythonオブジェクトからyaml文書を生成する
1、yaml.dump()方法
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モジュールの内容については以前の記事を検索したり、次の関連記事を見たりしてください。これからもよろしくお願いします。