gpt4 book ai didi

Python 转储 YAML 在字符串周围使用双引号

转载 作者:行者123 更新时间:2023-11-28 18:19:54 25 4
gpt4 key购买 nike

在 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: “我的数据”

最佳答案

有一种相对简单的方法可以做到这一点:

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 加载始终是一个好主意,无论是双引号、 block 样式文字标量、十六进制整数还是注释保存。
该库在没有文档的情况下在幕后做了很多工作,而且该库的作者可能懒得提供更多。

关于Python 转储 YAML 在字符串周围使用双引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45724331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com