【问题标题】:Python Dump YAML Using Double Quotes Around StringsPython 使用双引号围绕字符串转储 YAML
【发布时间】:2018-01-25 05:34:56
【问题描述】:

在 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"

【问题讨论】:

    标签: python yaml python-3.5 quotes double-quotes


    【解决方案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
    

    在使用ruamel.yamls 往返模式时,无需显式执行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 加载总是一个好主意,无论是双引号、块样式文字标量、十六进制整数还是注释保留。
    该库在没有文档的情况下在幕后做了很多工作,而且该库的作者可能懒得提供更多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-15
      • 1970-01-01
      相关资源
      最近更新 更多