2015-09-29 1 views
1
server: 
- import: 
     cmd: GET GPRS <gprsEn> <gprsVa> <gprsSt> 
- update: 
     gprsEn: 1 
     gprsVa: 202 
     gprsSt: reegan 

Ceci est mon fichier YAML comment faire référence gprsEn, gprsVa et valeur gprsSt dans GET GPRS 1 202 reegan i besoin d'une sortie est commeComment référencer la valeur tag YAML

GET GPRS 1 202 reegan 

Répondre

1

Il n'y a pas de substitution de chaîne définie nulle part dans la spécification YAML, donc vous devez le faire vous-même par exemple en faisant:

import ruamel.yaml as yaml 

yaml_str = """\ 
server: 
- import: 
     cmd: GET GPRS <gprsEn> <gprsVa> <gprsSt> 
- update: 
     gprsEn: 1 
     gprsVa: 202 
     gprsSt: reegan 
""" 

data = yaml.load(yaml_str, Loader=yaml.RoundTripLoader) 

cmd = data['server'][0]['import']['cmd'].replace('<', '{').replace('>', '}') 
keywords = data['server'][1]['update'] 
print(cmd.format(**keywords)) 

qui imprime exactement la sortie que vous voulez:

GET GPRS 1 202 reegan 

Vous pouvez bien sûr aussi d'élargir l'analyseur, mais il aurait encore besoin de passer par des cerceaux pour spécifier la source du mot-clé/l'expansion de valeur qui, dans votre cas, n'est pas pertinente (c'est-à-dire pas une cartographie de haut niveau).

+0

Merci pour la solution, le cas échéant est-il en écriture partielle dans le fichier yaml.j'ai plus la carte 10 est là, j'ai changer la valeur de carte particulière –

+1

@ReeganMiranda Oui, vous pouvez écrire des fichiers YAML, si vous utilisez ma bibliothèque (ruamel.yaml) avec le mode RoundTrip sans perte de données. Si vous voulez écrire en partie ou écrire des données partiellement résolues (avec la méthode ci-dessus), vous pouvez le faire. Vous pouvez écrire le résultat, y compris les commentaires etc, tant que vous ne remplacez pas les dicts complets par de nouveaux (par exemple, ne mettez à jour qu'une valeur de clé existante) – Anthon