Установка стиля yaml для определенных ключей с помощью специального представителяPython

Программы на Python
Ответить
Anonymous
 Установка стиля yaml для определенных ключей с помощью специального представителя

Сообщение Anonymous »

Я хочу установить некоторые конкретные значения ключей, все из которых являются списками, в стиле потока, а все остальное - в стиле блока.
Я вижу, что могу установить стиль любой конкретный CommentedSeq через CommentedSeq.fa.set_flow_style(), который можно выполнить после загрузки данных yaml, но я бы предпочел настроить собственный репрезентатор для обработки этого.
Похоже, следующая функция работать после загрузки:

Код: Выделить всё

from ruamel.yaml import YAML
from ruamel.yaml.comments import CommentedMap, CommentedSeq
import sys

# Keys to enforce flow style for
keys_with_flow_style = ["categories", "classification"]

def set_flow_style_recursive(yamldata, flowkeys):
if isinstance(yamldata, (dict, CommentedMap)):
for k,v in yamldata.items():
if k in flowkeys:
if isinstance(v, (dict, CommentedMap)):
set_flow_style(v, flowkeys)
elif isinstance(v, (CommentedSeq)):
v.fa.set_flow_style()
set_flow_style(v, flowkeys)
elif isinstance(v, (dict, CommentedMap)):
set_flow_style(v, flowkeys)
elif isinstance(yamldata, (list, CommentedSeq)):
for item in yamldata:
set_flow_style(item, flowkeys)

yaml_data = """
data:
categories:
- CLNT
- TXN
- MKDT
- REFD
- PERS
- CODE
classification:
- RES
description: This application processes data
"""

yaml = YAML().load(yaml_data)
set_flow_style_recursive(yaml, keys_with_flow_style)
YAML().dump(yaml, syst.stdout)
Он печатает:

Код: Выделить всё

"""
data:
categories: [CLNT, TXN, MKDT, REFD, PERS, CODE]
classification: [RES]
description: This application processes data
"""
Я не могу понять, как превратить это в репрезентатор, чтобы стиль потока автоматически применялся к определенным значениям ключа при загрузке (а все остальное по умолчанию - блочный стиль) . Кто-нибудь здесь знаком с этим?

Подробнее здесь: https://stackoverflow.com/questions/793 ... epresenter
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»