在转换字符串时使用双引号的Python转储YAML
问题描述:
在Python 3.5中,我将以下字典转储为.yaml文件。在转换字符串时使用双引号的Python转储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"
答
有一个比较简单的方法来做到这一点:
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
没有必要使用ruamel.yaml
是圆的行程模式时,明确地做default_flow_style=False
。
的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
负载总是一个好主意,无论是用于双引号s,块样式文字标量,十六进制整数或注释保留。
图书馆在没有文档的幕后做了很多工作,图书馆的作者可能懒得提供更多的文档。