2015-09-29 2 views

ответ

1

Там нет строки замещения определяется где-нибудь в спецификации YAML, поэтому вам нужно сделать это самостоятельно, например делая:

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

который печатает именно вывод, который вы хотите:

GET GPRS 1 202 reegan 

Конечно, Вы можете также расширить синтаксический анализатор, но все равно нужно будет пройти через обручи, чтобы указать источник ключевого слова/value, которое в вашем случае не имеет отношения к делу (т. е. не отображение некоторого количества).

+0

Благодарим за решение, если есть какие-либо возможности в частичной записи в yaml file.i, у вас есть еще 10 карт, у меня есть изменение определенного значения карты –

+1

@ReeganMiranda Да вы можете писать файлы YAML, если вы используете мою библиотеку (ruamel.yaml) с режимом RoundTrip без потери данных. Если вы хотите частично записать или записать частично разрешенные (с указанным выше способом) данные, вы можете это сделать. Вы можете написать результат, в том числе комментарии и т. Д., Если вы не замените полный dicts новыми (т. Е. Обновите только существующее значение ключа) – Anthon