在转换字符串时使用双引号的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


DoubleQuotedScalarStringstr一个子类,就是用来存储"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,块样式文字标量,十六进制整数或注释保留。
图书馆在没有文档的幕后做了很多工作,图书馆的作者可能懒得提供更多的文档。