2016-07-03 10 views
0

yamlの値を「保留中」のファイルに更新するツールを作ろうとしていました。それは作業を行いますが、私はそれがこのようにフォーマットする必要がありますyaml.dumpがdictにダンプしていますが、そのようにしたくありません

fields: {WishName: ("name"), WishNameState: ("APPROVED"), setName: ("name")} 

は、どのように私はそれが私が望む形式でダンプすることができます:

fields: 
    setName: ("name") 
    WishName: ("name") 
    WishNameState: ("PENDING") 

しかし、それはこの形式でそれをダンプしたいですそれは? は、ここに私のコードですので、あなたは、私は現在、それをやっている方法を知っている:任意およびすべてのヘルプは高く評価され

import glob 
import os 
import yaml 
def processFile(f,t): 
    data = open(f,'rb').read() 
    lines = data.replace('\r\n','\n').split('\n') 
    lines_found = [] 
    for i,x in enumerate(lines): 
     if t in x: 
      lines_found.append(i+1) 

    return lines_found 

term = 'PENDING' 
for x in glob.glob('*.yaml'): 
    r = processFile(x,term) 
    if r: 
     with open(x) as f: 
      yamlfile = yaml.load(f) 

     fields = yamlfile['fields'] 
     name = fields['WishName'] 

     print('Name: ' + name) 
     print('Approve or reject?') 
     aor = raw_input('a/r: ') 

     if aor == 'a': 
      fields['setName'] = name 
      fields['WishNameState'] = '("APPROVED")' 
      with open(x, "w") as f: 
       yaml.dump(yamlfile, f) 
     elif aor == 'r': 
      fields['WishNameState'] = '("REJECTED")' 
      with open(x, "w") as f: 
       yaml.dump(yamlfile, f) 
     else: 
      'Invalid response. Shutting down...' 
      sys.exit() 

print('End of results!') 

を!あなたのコードに感謝:)

+0

コードは、yamlファイルを期待どおりに変更します。どうしましたか? – falsetru

+1

同様の質問http://stackoverflow.com/a/18210750/5781248 –

+0

@falsetru、問題は、それがダンプされるときに別の方法でフォーマットされることです。それはすべてを辞書に変換します。しかし、それは 'fields:{setName:(" Hey ")、WishName:(" Hi ")のようにダンプします。 )} 'それをやりたいとは思わない。 – Developre

答えて

0

yaml.dump(yamlfile、F、default_flow_style = Falseを持つ

yaml.dump(yamlfile、F)

を置き換えます)

関連する問題