2017-09-11 17 views
-1

yamlファイルがあります。時間ユーザの任意の時点で読む方法PythonでYAMLを動的に更新する

--- 
env: 
    credentials: 
    endpoint: "value" 
    username: "value" 
    tenant: "value" 
    password: "value" 

    ld_a: 
    network: 
     subnet-name: 
      - sub1 
     ld_filename: 
      - ld1.xml 
     fd_filename: 
      - fd1.xml 
      - fd2.xml 

    ld_b: 
    network: 
     subnet-name: 
      - sub2 
     ld_filename: 
      - ld2.xml 
     fd_filename: 
      - fd1.xml 
      - fd2.xml 

ld_cまたは後続タグでYAMLを更新したり、任意のタグを除去することができます。

現在のところ、私はld_aをdictでチェックしており、ネストされたキー、値(下記)を処理しています。

with open(r'C:\file.yaml', 'r') as fd: 
    data = yaml.load(fd) 

items = data.get('env') 
for descriptor, value in items.iteritems(): 
    if descriptor == 'credentials': 
     tenant = value.get('tenant') 
     username = value.get('username') 
     password = value.get('password') 
     endpoint = value.get('endpoint') 


    if descriptor == 'ld_a': 
     for descriptor in value.viewvalues(): 
      for user_networks in descriptor.get('subnet-name'): 
       get_network_details(neutron, user_networks) 

しかし、ユーザーがキーを追加/削除するときは、たとえばld_cとなります。これをPythonでどのように扱うべきですか?ここに私の基本的な知識を用いて

+1

あなたは、プログラムが実行されているファイルシステムのfile.yamlの内容を変更することで、ユーザーがキーを追加/削除すると言っているようです。ファイルを変更するたびにユーザーがプログラムを再実行できない理由がある場合は、前提条件や要件を明確にする必要があります。 – Peter

+1

私はそれを取得しないでください。間隔を置いてファイルをリロードし、新しい 'keys'(例えば' ld_c'のようなもの)を確認し、そこに操作を実行するためのものがあるかどうかを確認することができます。つまり、コードに 'if'文を追加する必要があるだけです! – TechJS

+0

もう一つのことは、 '後続タグ'の意味ですか?あなたは 'ld_c'、' ld_d'、 'ld_e'などを意味しますか? – TechJS

答えて

4

は、あなたの答えです:

import re 

pattern = re.compile(r"ld_[a-z]") 

if pattern.match(descriptor): 
    for descriptor in value.viewvalues(): 
     for user_networks in descriptor.get('subnet-name'): 
      get_network_details(neutron, user_networks) 

基本的にあなたがdescriptorで正規表現を実行しているし、それをzに(A、B、Cで1つの文字が続くすべてのld_文字に一致します。 ..など)

+0

はチャームのように機能します。ありがとう! – tgcloud

関連する問題