gpt4 book ai didi

python - 不同的 YAML 数组表示

转载 作者:行者123 更新时间:2023-11-30 22:14:57 31 4
gpt4 key购买 nike

我正在使用 Python 和 PyYAML 为一个项目编写一个文件类型转换器,在这个项目中我要多次与 YAML 文件进行相互转换。这些文件随后由我无法控制的单独服务使用,因此我需要将 YAML 翻译回与我最初得到的相同的内容。我的原始文件包含以下部分:

key:
- value1
- value2
- value3

使用 yaml.load() 评估为 {key: [value1,value2,value3]}。当我将其翻译回 YAML 时,我的新文件如下所示:

key: [value1,value2,value3]

我的问题是,就 YAML 文件的各种语言解析器而言,这两种形式是否等价。显然使用 PyYaml,这些是等价的,但这是否适用于应用程序正在使用的 Ruby 或其他语言?否则,应用程序将无法正确显示数据。

最佳答案

正如 Jordan 已经指出的那样,节点样式是一个序列化细节。并且输出等同于您的输入。

使用 PyYAML,您可以在转储时使用 default_flow_style 关键字获得相同的 block 样式输出:

yaml.dump(yaml.load("""\
key:
- value1
- value2
- value3
"""), sys.stdout, default_flow_style=False)

给你:

key:
- value1
- value2
- value3

如果您要使用来自 ruamel.yaml 的往返功能(免责声明:我是那个包的作者)你可以这样做:

import sys
import ruamel.yaml as yaml

yaml_str = """\
key:
- value1
- value2 # this is the second value
- value3
"""

data = yaml.load(yaml_str, Loader=yaml.RoundTripLoader)

yaml.dump(data, sys.stdout, Dumper=yaml.RoundTripDumper, default_flow_style=False)

得到:

key:
- value1
- value2 # this is the second value
- value3

它不仅保留了流/ block 样式,而且还保留了评论和键顺序以及一些更透明的样式。这使得比较(例如,当使用某些版本控制系统 checkin YAML 文件时)变得更加容易。

对于读取 YAML 文件的服务来说,这一切都没有区别,但为了便于检查您是否正确转换内容,它确实有区别。

关于python - 不同的 YAML 数组表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38712483/

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