[PyYAML] 参照による抽象化をやめる
次のコードのように 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
|
これを抽象化せずに重複するデータをそのまま出力するには、次のように Dumper クラスを継承して、ignore_aliases
メソッドをオーバーライドするか、 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
|
参考