2017-11-04 21 views
0

YAMLファイルを読み込んで特定の値を更新する関数を書く必要があります。 YAMLファイルは yamlファイルを辞書として読み込み、Pythonを使って値を更新する方法

sample : 
    test_example: 
    parent: 
     attribute_1: 2 
     attribute_2: 2 
    parent2: 
     childList: 
     - group: 2 
      type: "test" 
      track_int: 
      - key_1: 3 
       key_2: 25 
       state: present 
      state: present 
     - group: 4 
      typr: "old" 
      track_int: 
      - key_1: 3 
       key_2: 25 
       state: present 
      state: present 

は、今私は、キーを渡すために関数を記述する必要があり、辞書であり、それは特定の値 元の値を置き換える必要があります - test_example["parent"]["attribute_2"]から 5

test_example["parent2"]["childList"][0]["group"] 4にを更新し、更新します

どうすればいいですか?

+0

このYAMLファイル/ドキュメントは辞書ではなく、マッピングとシーケンス(およびスカラー)の組み合わせです。ルートにはPython辞書としてロードされるマッピングがありますが、 "YAMLファイルは辞書です"というのは間違っています。 – Anthon

答えて

0

あなたは、"test""old"、その後、あなたの唯一の現実的な選択肢はruamel.yaml(免責事項を使用することです、あなたの順序のインデントにダッシュのオフセットの周りに余計な引用符を含めているとして、入力ファイルの残りの部分を保存する場合:I

import sys 
import ruamel.yaml 

yaml = ruamel.yaml.YAML() 
yaml.preserve_quotes = True 
yaml.indent(mapping=4, sequence=4, offset=2) 

with open('input.yaml') as fp: 
    data = yaml.load(fp) 

test_example = data['sample'] 
test_example["parent2"]["childList"][0]["group"] =4 
test_example["parent"]["attribute_2"] = 5 
yaml.dump(data, sys.stdout) 

が与える:あなたのPython test_example

sample: 
    test_example: 
    parent: 
     attribute_1: 2 
     attribute_2: 5 
    parent2: 
     childList: 
      - group: 4 
      type: "test" 
      track_int: 
       - key_1: 3 
       key_2: 25 
       state: present 
      state: present 
      - group: 4 
      typr: "old" 
      track_int: 
       - key_1: 3 
       key_2: 25 
       state: present 
      state: present 

命名はもちろんに対応することができない、そのパッケージの作者)午前入力ファイルの。これはNoneとしてロードされます(あなたの入力が実際にYAML文書を提示したときにインデントされていると仮定します)。

関連する問題