yaml tutorial comprehensive guide yaml using python
このYAMLチュートリアルでは、Pythonを使用したコード例を使用して、YAMLとは何か、データ型、YAMLバリデーター、パーサー、エディター、ファイルなどのYAMLの基本概念について説明します。
コンピュータサイエンスのテキスト処理は、プログラマが構成可能なプログラムとアプリケーションを作成するのに役立ちます。マークアップ言語は、人間が読める形式でデータを保存および交換する上で重要な役割を果たします。
さらに、プログラマーはマークアップ言語を一般的なものとして使用し、異なるシステム間で標準のデータ交換フォーマットを使用します。いくつか 例 マークアップ言語には、HTML、XML、XHTML、およびJSONが含まれます。
このわかりやすいYAMLチュートリアルで、もう1つのマークアップ言語に関する情報を共有しました。
このチュートリアルは、読者が以下の質問に対する答えを見つけるのに役立ちます。学習者は最初の一歩を踏み出し、一般的なマークアップ言語、特にYAMLの謎を理解することができます。
質問は次のとおりです。
- なぜマークアップ言語が必要なのですか?
- YAMLは何の略ですか?
- YAMLが作成されたのはなぜですか?
- なぜYAMLを学ぶ必要があるのですか?
- 今日、YAMLを学ぶことが重要なのはなぜですか?
- YAMLにはどのような種類のデータを保存できますか?
このガイドは、プログラミング全般のコンテキストで、またソフトウェアテストのコンテキストで概念を説明するときにも、経験豊富な読者に役立ちます。ここでは、シリアル化や逆シリアル化などのトピックについても説明します。
学習内容:
YAMLとは
YAMLの作成者は、当初、YAMLを「YetAnotherMarkup言語」と名付けました。ただし、時間の経過とともに、頭字語は「YAMLはマークアップ言語ではありません」に変更されました。 YAMLはそれ自体を指す頭字語であり、再帰的頭字語と呼ばれます。
この言語を利用して、データと構成を人間が読める形式で保存できます。 YAMLは学ぶべき初歩的な言語です。その構成も理解しやすいです。
Clark、Ingy、Orenは、理解が難しい他のマークアップ言語を理解することの複雑さに対処するためにYAMLを作成しました。また、学習曲線もYAMLの学習よりも急です。
いつものように、学習をより快適にするために、サンプルプロジェクトを利用します。このプロジェクトは、MITライセンスを使用してGithubでホストされており、必要に応じて誰でも変更を加えてプルリクエストを送信できます。
以下のコマンドを使用して、プロジェクトのクローンを作成できます。
git clone git@github.com:h3xh4wk/yamlguide.git
ただし、必要に応じて、 郵便番号をダウンロードする コードと例のファイル。
あるいは、読者はIntelliJIDEAの助けを借りてこのプロジェクトのクローンを作成することができます。プロジェクトのクローンを作成する前に、Pythonをインストールし、IntelliJIDEAで構成するための前提条件に関するセクションを完了してください。

マークアップ言語が必要な理由
すべてをソフトウェアコードで書くことは不可能です。これは、コードを時々維持する必要があり、詳細を外部ファイルまたはデータベースに抽象化する必要があるためです。
コードを可能な限り最小限に抑え、必要なさまざまなデータ入力を変更する必要がないようにコードを作成することをお勧めします。
例えば、 コードとデータを1つのファイルにまとめるのではなく、外部ファイルから入力データを取得してその内容を1行ずつ出力する関数を作成できます。
データの作成とコードの作成の問題が分離されるため、ベストプラクティスと見なされます。コードからデータを抽象化するプログラミングアプローチにより、メンテナンスが容易になります。
マークアップ言語を使用すると、階層情報をよりアクセスしやすく軽量な形式で簡単に保存できます。これらのファイルは、多くの帯域幅を消費することなくインターネットを介してプログラム間で交換でき、最も一般的なプロトコルをサポートします。
これらの言語は普遍的な標準に従い、さまざまなエンコーディングをサポートして、世界中のほぼすべての話し言葉の文字をサポートします。
マークアップ言語の最も優れている点は、その一般的な使用がどのシステムコマンドにも関連付けられていないことです。この特性により、マークアップ言語はより安全になり、世界中で広く採用されています。したがって、出力を作成するために直接実行できるYAMLコマンドが見つからない場合があります。
YAMLファイルを使用する利点
YAMLには多くの利点があります。以下の表は、YAMLとJSONの比較を示しています。 JSONはJavaScriptObject Notationの略で、データ交換形式として使用します。
属性 | YAML | JSON |
---|---|---|
冗長性 | 冗長性が少ない | より冗長 |
データ型 | 複雑なデータ型をサポートします。 | 複雑なデータ型はサポートしていません。 |
コメント | '#'を使用したコメントの書き込みをサポートします。 | コメントの書き込みはサポートされていません。 |
読みやすさ | より人間が読める形式。 | 人間が読めない。 |
自己参照 | '&、'、および*を使用した同じドキュメント内の要素の参照をサポートします。 | 自己参照をサポートしていません。 |
複数のドキュメント | 1つのファイルで複数のドキュメントをサポートします。 | 単一のファイルで単一のドキュメントをサポートします。 |
JSONなどの他のファイル形式に対するYAMLの利点により、YAMLは、その汎用性と柔軟性のために開発者の間でより普及しています。
前提条件
最初にPythonをインストールしてから、IntelliJIDEAを使用してPythonとそのパッケージを構成します。したがって、続行する前にまだインストールされていない場合は、IntelliJIDEAをインストールしてください。
Pythonをインストールする
次の手順に従って、Windows10にPythonをインストールしてセットアップします。
ステップ1
Pythonをダウンロード 下の画像に示すようにセットアップを選択してインストールします。

ステップ2
セットアップを開始し、インストールのカスタマイズを選択します。のチェックボックスを選択します PATHへのPythonの追加 。

ステップ3
画像に表示されているようにPythonの場所をカスタマイズします。

ステップ4
インストールを進めます。インストールウィザードの最後に、ウィザードのオプションをクリックして、Windowsのパス制限を無効にします。

これで、Pythonのセットアップが完了しました。
IntelliJIDEAでPythonを構成する
それでは、Pythonを使用してIntelliJIDEAを構成しましょう。最初のステップは、Pythonプロジェクトで作業できるようにプラグインをインストールすることです。
Pythonプラグインをインストールする
Python CommunityEditionをインストールします

Pythonセキュリティをインストールする

以下の手順に従って、構成を完了します。
ステップ1
(ファイル)メニューを使用して、(プラットフォーム設定)に移動します。クリックしてください SDKボタンを追加 。

ステップ2
を選択 仮想環境オプション 前の手順でインストールしたものとしてPythonの基本インタプリタを選択します。

ステップ3
次に、前の手順で作成した仮想環境を プロジェクトSDK設定 。

1つのプロジェクトに1つの仮想環境をお勧めします。
ステップ4 (オプション)
プロジェクトエクスプローラーからconfig.pyファイルを開き、をクリックします。 インストール要件 、下の画像に示すように。

(パッケージの選択)ダイアログのオプションをオフにして、必要に応じてipython要件を無視します。

これで、次のセクションに進んでYAMLの基本を学ぶことができます。
YAMLの基本
このセクションでは、config.ymlおよびconfig.pyというサンプルファイルを使用して、YAMLの基本について説明します。 YAMLの概念をプログラミング言語での使用と並行して説明することで、学習が向上すると確信しています。
したがって、YAMLの基本を説明する一方で、Pythonを使用してYAMLに格納されているデータを読み書きすることも含まれます。
それでは、それぞれのエディターでconfig.ymlを作成または開き、YAMLを理解しましょう。
--- quiz: description: > 'This Quiz is to learn YAML.' questions: - ('How many planets are there in the solar system?', 'Name the non-planet') - 'Who is found more on the web?' - 'What is the value of pi?' - 'Is pluto related to platonic relationships?' - 'How many maximum members can play TT?' - 'Which value is no value?' - 'Don't you know that the Universe is ever-expanding?' answers: - (8, 'pluto') - cats - 3.141592653589793 - true - 4 - null - no # explicit data conversion and reusing data blocks extra: refer: &id011 # give a reference to data x: !!float 5 # explicit conversion to data type float y: 8 num1: !!int '123' # conversion to integer str1: !!str 120 # conversion to string again: *id011 # call data by giving the reference
YAMLファイルには.ly拡張。言語では大文字と小文字が区別されます。インデントにはタブではなくスペースを使用します。
これらの基本に加えて、データ型を理解しましょう。前述のYAMLでは、クイズで情報を表現しました。クイズは、説明、質問、回答などの属性を持つルートレベルのノードとして表されます。
YAMLデータ型
YAMLは、スカラー、シーケンス、およびマッピングを保存できます。必要なすべてのデータ型をconfig.ymlファイルに書き込む方法を示しました。
スカラーは、文字列、整数、浮動小数点数、およびブール値です。文字列型のデータは二重引用符で囲まれています。ただし、YAMLでは文字列を二重引用符で囲む必要はなく、>または|を利用できます。複数行に長い文字列を書き込むため。
以下の表で、さまざまなデータ型とマップされた値を確認してください。
データ・タイプ | Config.ymlのデータ型の例 |
---|---|
ストリング 文字列は引用符付きまたは引用符なしで保存できます。 | クイズ: 説明:> このクイズはYAMLを学ぶためのものです 質問: -「ウェブ上でもっと見つけられるのは誰ですか?」 回答: -猫 |
整数と浮動小数点 整数とfloatは元の形式で記述されています | クイズ: 質問: -「円周率の値は何ですか?」 -「TTをプレイできる最大メンバー数は?」 回答: -3.141592653589793 -4 |
ブール値 ブール値は、文字列true / falseまたはyes / noを使用して格納されます | クイズ: 質問: -「冥王星はプラトニックな関係に関連していますか?」 -「宇宙が拡大し続けていることをご存知ですか?」 回答: -本当 - しない |
シーケンス シーケンスは角括弧(を使用して作成されます。 | クイズ: 回答: -(8、 '冥王星') |
参考文献 自己参照は&と*の助けを借りて使用されます | #明示的なデータ変換とデータブロックの再利用 追加: 参照:&id011#データへの参照を与える #その他の値 再度:* id011#参照を指定してデータを呼び出す |
以下に、YAMLファイルの追加要素に注目する価値のあるものをいくつか示します。
資料
ここで、3つのダッシュに注目してください—。これは、ドキュメントの開始を意味します。ルート要素としてクイズを含む最初のドキュメントを保存し、関連する値を持つ子要素として説明、質問と回答を保存します。
明示的なデータ型
config.ymlでextraと呼ばれるセクションキーを確認します。二重の感嘆符の助けを借りて、ファイルに格納されている値のデータ型に明示的に言及できることがわかります。 !! floatを使用して整数をfloatに変換します。 !! strを使用して整数を文字列に変換し、!! intを使用して文字列を整数に変換します。
PythonのYAMLパッケージは、YAMLファイルを読み取り、辞書として内部的に保存するのに役立ちます。 Pythonは辞書キーを文字列として格納し、「!!」を使用して明示的に指定されていない限り、値をPythonデータ型に自動変換します。
PythonでYAMLファイルを読む
一般に、YAMLの作成時には、YAMLエディターとYAMLバリデーターを使用します。 YAML Validatorは、書き込み時にファイルをチェックします。
Python YAMLパッケージにはYAMLパーサーが組み込まれており、ファイルをメモリに保存する前に解析します。
次に、以下のコンテンツを使用して、それぞれのエディターでconfig.pyを作成して開きます。
import yaml import pprint def read_yaml(): ''' A function to read YAML file''' with open('config.yml') as f: config = yaml.safe_load(f) return config if __name__ == '__main__': # read the config yaml my_config = read_yaml() # pretty print my_config pprint.pprint(my_config)
上記の手順を完了したことをテストするには、config.pyを実行します。
IntelliJ IDEAでconfig.pyファイルを開き、メインブロックを見つけて、再生アイコンを使用してファイルを実行します。

ファイルを実行すると、コンソールに出力が表示されます。

read_yaml関数では、config.ymlファイルを開き、YAMLパッケージのsafe_loadメソッドを使用してストリームをPythonディクショナリとして読み取り、returnキーワードを使用してこのディクショナリを返します。
my_config変数は、config.ymlファイルの内容を辞書として保存します。 pprintと呼ばれるPythonのプリティプリントパッケージを使用して、辞書をコンソールに出力します。
.mkvファイルを再生する方法
上記の出力に注意してください。すべてのYAMLタグはPythonのデータ型に対応しているため、プログラムはこれらの値をさらに使用できます。テキスト入力からPythonオブジェクトを構築するこのプロセスは、逆シリアル化と呼ばれます。
PythonでYAMLファイルを書く
config.pyを開き、read_yamlメソッドのすぐ下でファイルのメインブロックの上に次のコード行を追加します。
def write_yaml(data): ''' A function to write YAML file''' with open('toyaml.yml', 'w') as f: yaml.dump(data, f)
write_yamlメソッドでは、toyaml.ymlというファイルを書き込みモードで開き、YAMLパッケージのdumpメソッドを使用してYAMLドキュメントをファイルに書き込みます。
次に、ファイルconfig.pyの最後に以下のコード行を追加します。
# write A python object to a file write_yaml(my_config)
config.pyを保存し、以下のコマンドを使用するか、IDEの再生アイコンを使用してファイルを実行します。
python config.py
上記のコマンドは、config.ymlの内容をコンソールまたはシステムの出力に出力していることがわかります。 Pythonプログラムは、同じコンテンツをtoyaml.ymlという別のファイルに書き込みます。 Pythonオブジェクトを外部ファイルに書き込むプロセスは、シリアル化と呼ばれます。
YAMLの複数のドキュメント
YAMLは非常に用途が広く、1つのYAMLファイルに複数のドキュメントを保存できます。
ファイルconfig.ymlのコピーをconfigs.ymlとして作成し、ファイルの最後に以下の行を貼り付けます。
--- quiz: description: | This is another quiz, which is the advanced version of the previous one questions: q1: desc: 'Which value is no value?' ans: Null q2: desc: 'What is the value of Pi?' ans: 3.1415
3つのダッシュ—上記のスニペットでは、同じファイル内の新しいドキュメントの始まりを示しています。 |の使用descriptionタグの後に、文字列型の複数行のテキストを書き込むことができます。ここで新しいドキュメントに、質問と回答を質問の下にネストされた個別のマッピングとして保存しました。
次に、configs.pyという名前の新しいファイルを作成し、以下のコードをファイルに貼り付けます。
import yaml import pprint def read_yaml(): ''' A function to read YAML file''' with open('configs.yml') as f: config = list(yaml.safe_load_all(f)) return config def write_yaml(data): ''' A function to write YAML file''' with open('toyaml.yml', 'a') as f: yaml.dump_all(data, f, default_flow_style=False) if __name__ == '__main__': # read the config yaml my_config = read_yaml() # pretty print my_config pprint.pprint(my_config) # write A python object to a file write_yaml(my_config)
read_yaml関数とwrite_yaml関数の変更に注意してください。 read_yamlでは、YAMLパッケージのsafe_load_allメソッドを使用して、configs.ymlに存在するすべてのドキュメントをリストとして読み取ります。同様に、write_yamlでは、dump_allメソッドを使用して、以前に読み取ったすべてのドキュメントのリストをtoyaml.ymlという新しいファイルに書き込みます。
次に、configs.pyを実行します。
python configs.py
上記のコマンドの出力を以下に示します。
({'quiz': {'answers': ((8, 'pluto'), 'cats', 3.141592653589793, True, 4, None, False), 'description': 'This Quiz is to learn YAML', 'questions': (('How many planets are there in the solar system?', 'Name the non planet'), 'Who is found more on the web?', 'What is the value of pi?', 'Is pluto related to platonic relationships?', 'How many maximum members can play TT?', 'Which value is no value?', 'Don't you know that Universe is ever-expanding?')}}, {'quiz': {'description': 'This is another quiz, which
' 'is the advanced version of the previous one
', 'questions': {'q1': {'ans': None, 'desc': 'Which value is no value?'}, 'q2': {'ans': 3.1415, 'desc': 'What is the value of Pi?'}}}})
出力は、前述の単一ドキュメントの出力と同様です。 Pythonは、configs.yml内のすべてのドキュメントをPython辞書に変換します。これにより、値のさらなる処理と使用が容易になります。
よくある質問
YAMLを使用しているときに、以下の質問に遭遇する可能性があります。
Q#1)YAMLマッピングの順序を維持することは可能ですか?
回答: はい、PythonのpyYAMLパッケージのローダーのデフォルトの動作をカスタマイズすることは可能です。示されているように、OrderedDictsを使用し、カスタムメソッドでベースリゾルバーをオーバーライドする必要があります。 ここに 。
Q#2)YAMLに画像を保存するにはどうすればよいですか?
回答: 以下に示すように、画像をbase64エンコードして、YAMLに保持できます。
image: !!binary | iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg==
Q#3)>と|の違いは何ですかYAMLのタグ?
回答: >と|の両方YAMLで複数行に値を書き込むことができます。大なり記号>を使用して複数行の文字列を記述し、|リテラル値を表します。 |を使用して記述された値エスケープする必要はありません。 例えば、 |を使用してHtmlを保存できます。
template: | This is a test paragraph
This is another paragraph
Q#4)YAMLファイルの最後にある…の意味は何ですか。
回答: 3つのピリオド…はオプションの識別子です。これらは、ストリーム内のドキュメントの終わりをマークするために使用できます。
Q#5)YAMLファイルにコメントを書き込む方法は?
回答: #を使用して1行のコメントを記述します。 YAMLは複数行コメントをサポートしていません。したがって、以下に示すように、複数行で#を使用する必要があります。
# this is # a single line as well as multi-line # comment
結論
このガイドでは、YAMLを使い始めるために、WindowsとLinuxの両方で開発環境を準備する手順について説明しました。 YAMLの基本的なデータ型、YAMLエディター、YAMLパーサーのすべての概念についてほぼ説明しました。
また、他のマークアップ言語と比較してYAMLを使用する利点を強調し、サポートするサンプルプロジェクトの助けを借りてコード例を提供しました。これで、学習者がYAMLを使用してアプリケーションロジックからデータを抽象化し、効率的で保守可能なコードを記述できるようになることを願っています。
ハッピーラーニング!!