次の内容のtest.yamlファイルがあります:
school_ids:
school1: "001"
#important school2
school2: "002"
targets:
neighborhood1:
schools:
- school1-paloalto
teachers:
- 33
neighborhood2:
schools:
- school2-paloalto
teachers:
- 35
ruamelを使用して、ファイルを次のように更新したいと思います。
school_ids:
school1: "001"
#important school2
school2: "002"
school3: "003"
targets:
neighborhood1:
schools:
- school1-paloalto
teachers:
- 33
neighborhood2:
schools:
- school2-paloalto
teachers:
- 35
neighborhood3:
schools:
- school3-paloalto
teachers:
- 31
コメントを保存して目的の出力を取得するために、ruamelを使用してファイルを更新するにはどうすればよいですか?
これが私がこれまでに持っているものです:
import sys
from ruamel.yaml import YAML
inp = open('/targets.yaml', 'r').read()
yaml = YAML()
code = yaml.load(inp)
account_ids = code['school_ids']
account_ids['new_school'] = "003"
#yaml.dump(account_ids, sys.stdout)
targets = code['targets']
new_target = dict(neighborhood3=dict(schools=["school3-paloalto"], teachers=["31"]))
yaml = YAML()
yaml.indent(mapping=2, sequence=3, offset=2)
yaml.dump(new_target, sys.stdout)
またはnew_target
を使用せずに、最初から作成したものをダンプしているだけです。代わりに、ロードしたものを使用して、ルートレベルのキーに関連付けられた値を拡張してから、ダンプする必要があります。code
targets
code
code
import sys
from pathlib import Path
from ruamel.yaml import YAML
inp = Path('test.yaml')
yaml = YAML()
code = yaml.load(inp)
school_ids = code['school_ids']
school_ids['school3'] = "003"
targets = code['targets']
targets['neighborhood3'] = dict(schools=["school3-paloalto"], teachers=["31"])
yaml = YAML()
yaml.indent(mapping=2, sequence=4, offset=2)
yaml.dump(code, sys.stdout)
これは:
school_ids:
school1: '001'
#important school2
school2: '002'
school3: '003'
targets:
neighborhood1:
schools:
- school1-paloalto
teachers:
- 33
neighborhood2:
schools:
- school2-paloalto
teachers:
- 35
neighborhood3:
schools:
- school3-paloalto
teachers:
- '31'
シーケンスのインデントは、オフセットより少なくとも2大きくする必要があることに注意してください(-
+スペースのスペースを確保するために2つの位置)
出力には、キーの後の間に空の行がありますschool2
。これは、これらが解析中に関連付けられるためです。これは新しいキーに移動できますが、簡単ではありません。それを行う必要がある場合(YAMLドキュメントのセマンティクスにとって重要ではありません)、ここで私の答えを見てください
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加