[PyYAML] アンカーとエイリアスを使わずに出力する
PyYAML が重複データをアンカー(&id001)とエイリアス(*id001)で出力するとき、参照を使わず同じ値を繰り返して出力する方法を示す。
次のコードのように PyYAML を使って出力する際は、重複するデータをアンカーとエイリアスでまとめることがある。
| import yaml
sample_dict = {
"key1": "value1",
"key2": "value2",
}
yaml_data = [sample_dict, sample_dict]
print(yaml.dump(yaml_data))
|
上記のコードを実行すると、次のような YAML ファイルが出力される。
| - &id001
key1: value1
key2: value2
- *id001
|
アンカーとエイリアスを使わず同じデータをそれぞれ出力するには、ignore_aliasesの挙動を変える。次に示すように、Dumper クラスの継承と lambda 関数のどちらでも対応できる。
| import yaml
class NoAliasDumper(yaml.Dumper):
def ignore_aliases(self, data):
return True
sample_dict = {
"key1": "value1",
"key2": "value2",
}
yaml_data = [sample_dict, sample_dict]
print(yaml.dump(yaml_data, Dumper=NoAliasDumper))
# or
no_alias_dumper = yaml.dumper.Dumper
no_alias_dumper.ignore_aliases = lambda self, data: True
print(yaml.dump(yaml_data, Dumper=no_alias_dumper))
|
上記のコードを実行すると、参照を使わずに次のような YAML ファイルが出力される。
| - key1: value1
key2: value2
- key1: value1
key2: value2
|
参考