Python Dump YAML с использованием двойных кавычек вокруг строк

В Python 3.5 у меня есть следующий словарь, который нужно сбросить в файл .yaml.

D={'name': 'mydata', value: {'x': 1, 'y': 2, 'z':3}}

Когда я запускаю следующий код:

import ruamel
import ruamel.yaml as yaml
D={'name': 'mydata', 'value': {'x': 1, 'y': 2, 'z':3}}
yaml.round_trip_dump(D, open('my_yaml.yaml', 'w'),
                     default_flow_style=False, indent=4)

В результате my_yaml.yaml выглядит следующим образом:

name: mydata                                                                    
value:                                                                     
    z: 3                                                                     
    x: 1                                                                   
    y: 2

Мой вопрос: есть ли удобный способ написать двойные кавычки вокруг mydata, то есть вместо name: mydata он пишется как name: "mydata"


person wolfustc    schedule 16.08.2017    source источник


Ответы (1)


Есть относительно простой способ сделать это:

import sys
import ruamel.yaml

S = ruamel.yaml.scalarstring.DoubleQuotedScalarString
D = {'name': S('mydata'), 'value': {'x': 1, 'y': 2, 'z':3}}

yaml = ruamel.yaml.YAML()
yaml.indent(mapping=4)
yaml.dump(D, sys.stdout)

последние три строки, использующие экземпляр YAML, являются более новым способом:

ruamel.yaml.round_trip_dump(D, sys.stdout, indent=4)

Используя новый API, вы можете указать другое значение отступа для своих последовательностей.

В любом случае, вышеизложенное дает вам:

name: "mydata"
value:
    x: 1
    y: 2
    z: 3

Нет необходимости явно выполнять default_flow_style=False при использовании двустороннего режима ruamel.yamls.


DoubleQuotedScalarString, подкласс str, используется для хранения "mydata", если вы загружаете свой предпочтительный вывод, сохраняя при этом кавычки:

yaml.preserve_quotes = True
data = yaml.load("""\
name: "mydata"
value:
    x: 1
    y: 2
    z: 3
""")
print(type(data['name']))

дает:

<class 'ruamel.yaml.scalarstring.DoubleQuotedScalarString'>

Если ваши выходные данные возвращаются правильно, всегда полезно проверить структуру данных, которую ruamel.yaml загружает, будь то двойные кавычки, литеральные скаляры блочного стиля, шестнадцатеричные целые числа или сохранение комментариев.
Библиотека многое делает за пределами сцены, для которых нет документации, а автор библиотеки, вероятно, поленился предоставить больше.

person Anthon    schedule 17.08.2017