2016-07-03 1 views
0

J'essayais de faire un outil qui met à jour les valeurs de yaml dans les fichiers qui ont "PENDING" en eux. Il fonctionne, mais j'ai besoin d'être formaté comme ceci:yaml.dump est dumping dans un dict, et je ne veux pas le faire

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

Cependant, il veut vider dans ce format:

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

Comment puis-je faire jeter dans le format que je veux à? Voici mon code, si vous savez comment je suis en train de faire, il:

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!') 

Toute aide est appréciée! Merci :)

+0

Votre code change les fichiers yam comme prévu. Qu'est-ce qui ne va pas? – falsetru

+1

Une question similaire, http://stackoverflow.com/a/18210750/5781248 –

+0

@falsetru, le problème est que je veux qu'il soit formaté d'une manière différente quand il est vidé. Cela transforme tout en dict. Je veux que le format reste comme 'fields: (NEWLINE) setName: (" hey ") (NEWLINE)' etc. Cependant, il le vide comme 'fields: {setName: (" Hey "), WishName: (" Salut ")} 'et je ne veux pas le faire. – Developre

Répondre

0

Dans votre code, remplacez

yaml.dump (yamlfile, f)

avec

yaml.dump (yamlfile, f, default_flow_style = False