在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"
答案 0 :(得分: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.yaml
。
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
加载总是一个好主意,无论是双引号,块样式文字标量,十六进制整数或注释保留。
图书馆在没有文档的幕后做了很多工作,图书馆的作者可能懒得提供更多文档。