Python:
YAML を操作する

どのようにして:

PythonでYAMLを読み書きするには通常、サードパーティのライブラリを使用します。その中でPyYAMLが最も人気があります。はじめに、pip install PyYAMLを実行してPyYAMLをインストールする必要があります。

例: YAMLファイルへの書き込み

import yaml

data = {'a list': [1, 42, 3.141, 1337, 'help', u'€'],
        'a string': 'boo!',
        'another dict': {'foo': 'bar', 'key': 'value', 'the answer': 42}}

with open('example.yaml', 'w') as f:
    yaml.dump(data, f, default_flow_style=False)

# これにより、データがYAML形式で構造化された`example.yaml`が作成されます。

例: YAMLファイルからの読み込み

import yaml

with open('example.yaml', 'r') as f:
    data_loaded = yaml.safe_load(f)

print(data_loaded)

# 出力: 
# {'a list': [1, 42, 3.141, 1337, 'help', '€'],
#  'a string': 'boo!',
#  'another dict': {'foo': 'bar', 'key': 'value', 'the answer': 42}}

構成管理にYAMLを使用する

多くのプログラマーはYAMLをアプリケーションの設定管理に使用します。ここでは、設定ファイルをどのように構造化し、それを読み取るかの例です:

config.yaml:

database:
  host: localhost
  port: 5432
  username: admin
  password: secret

Pythonで設定ファイルを読む:

import yaml

with open('config.yaml', 'r') as f:
    config = yaml.safe_load(f)

print(config['database']['host'])  # 出力: localhost

複雑な構造の取り扱い

PyYAMLでは、カスタムPythonオブジェクトを定義することで複雑な構造を扱うことができます。ただし、任意の関数やオブジェクトを実行しないようにsafe_loadを使用する安全な方法を確保してください。

import yaml

# Pythonオブジェクトを定義
class Example:
    def __init__(self, value):
        self.value = value

# カスタムコンストラクタ
def constructor_example(loader, node):
    value = loader.construct_scalar(node)
    return Example(value)

# "!example" タグのためのコンストラクタを追加
yaml.add_constructor('!example', constructor_example)

yaml_str = "!example 'data'"
loaded = yaml.load(yaml_str, Loader=yaml.FullLoader)

print(loaded.value)  # 出力: data

このスニペットでは、!exampleはYAML文字列から値’data’でExampleオブジェクトをインスタンス化するために使用されるカスタムタグです。このようなカスタムローダーは、より複雑なデータ構造やタイプの処理を可能にし、PyYAMLの柔軟性を拡大します。