YAMLを読めるようになる勉強ノード


ゼロからYAMLを読めるレベルまでの基礎知識をまとめました。
私と同じの初心者に共有します。

公式: https://yaml.org/

YAML

YAMLとは、インデントを使って構造化されたデータを表現するためのフォーマットです。

配列、ハッシュ、スカラーの書き方記述タイプがわかれば、YAMLファイルを読めるようになります。

YAMLの記述タイプ:

YAMLの書き方は二つあります。

  • ブロックスタイル : データを複数行にわたって記述する
  • フロースタイル :データを一行にまとめて記述する (「{}」 「[]」を使って構造を表す。「,」+半角スペースでデータを繋がる)

Pythonで実行で例を実行した。(飛ばす可)

環境

 Python: 3.7.5
 PyYamlモジュールを導入

PyYaml は pip コマンドでインストール:
$ pip install pyyaml
ファイル構造
-- yaml_dir
  - input.yaml
  - sample.py 
sample.py
import yaml

f = open("input.yaml", "r+")
data = yaml.load(f)
print(data)

YAMLの書き方

コメント

input.yaml
# コメント
- hello # コメント
Pythonで実行結果:
['hello']

配列

input.yaml
# ブロックスタイルの書き方 (「-」+半角スペース)
- aaa
- bbb
- ccc
-
  - ddd
  - eee

# フロースタイルの書き方
[aaa, bbb, ccc, [ddd, eee]]
Pythonで実行結果:
['aaa', 'bbb', 'ccc', ['ddd', 'eee']]

ハッシュ

input.yaml
# ブロックスタイルの書き方 (「:」+半角スペース)
A: aaa
B: bbb
C: ccc
D: 
  E: eee
  F: fff

# フロースタイルの書き方
{A: aaa, B: bbb, C: ccc, D: {E: eee, F: fff}}
Pythonで実行結果:
{'A': 'aaa', 'B': 'bbb', 'C': 'ccc', 'D': {'E': 'eee', 'F': 'fff'}}

スカラー

YAML では、以下のデータ型を自動的に判別します。

  • 整数
  • 浮動小数点
  • 真偽値 (true, yes, false, no)
  • Null値 (null, ~)
  • 日付 (yyyy-mm-dd)
  • タイムスタンプ

これら以外は文字列として認識されます。また引用符「’」や二重引用符「”」で囲むと、強制的に文字列として認識されます。

input.yaml
decimal1:  123                           # 整数 (10 進数)
decimal2:  1,234,567,890                 # 整数 (10 進数)
octal:     0644                          # 整数 (8 進数)
hexa:      0xFF                          # 整数 (16 進数)
float1:    0.05                          # 浮動小数点
bool1:     true                          # 真
bool2:     yes                           # 真
bool3:     on                            # 真
bool4:     false                         # 偽
bool5:     no                            # 偽
bool6:     off                           # 偽
null1:     ~                             # Null 値
null2:     null                          # Null 値
date:      2021-01-01                    # 日付
stamp:     2021-01-01 00:00:00 +09:00    # タイムスタンプ
str1:      'true'                        # 文字列
str2:      "2021"                        # 文字列
Pythonで実行結果:
{'decimal1': 123, 'decimal2': '1,234,567,890', 'octal': 420, 'hexa': 255, 'float1': 0.05, 'bool1': True, 'bool2': True, 'bool3': True, 'bool4': False, 'bool5': False, 'bool6': False, 'null1': None, 'null2': None, 'date': datetime.date(2021, 1, 1), 'stamp': datetime.datetime(2021, 1, 1, 0, 0, tzinfo=datetime.timezone(datetime.timedelta(seconds=32400))), 'str1': 'true', 'str2': '2021'}