gpt4 book ai didi

python - pyyaml 并仅对字符串使用引号

转载 作者:太空狗 更新时间:2023-10-29 20:51:26 28 4
gpt4 key购买 nike

我有以下 YAML 文件:

---
my_vars:
my_env: "dev"
my_count: 3

当我用 PyYAML 读取它并再次转储它时,我得到以下输出:

---
my_vars:
my_env: dev
my_count: 3

有问题的代码:

with open(env_file) as f:
env_dict = yaml.load(f)
print(yaml.dump(env_dict, indent=4, default_flow_style=False, explicit_start=True))

我尝试使用 default_style 参数:

with open(env_file) as f:
env_dict = yaml.load(f)
print(yaml.dump(env_dict, indent=4, default_flow_style=False, explicit_start=True, default_style='"'))

但现在我得到:

---
"my_vars":
"my_env": "dev"
"my_count": !!int "3"

我需要做什么才能保持原始格式,对 YAML 文件中的变量名称做出任何假设?

最佳答案

我建议您更新为使用向后兼容的 YAML 1.2(2009 年发布)ruamel.yaml包而不是使用 PyYAML,它实现了大部分 YAML 1.1 (2005)。 (免责声明:我是该软件包的作者)。

然后您只需在加载 YAML 文件来回传输时指定 preserve_quotes=True:

import sys
import ruamel.yaml

yaml_str = """\
---
my_vars:
my_env: "dev" # keep "dev" quoted
my_count: 3
"""

data = ruamel.yaml.round_trip_load(yaml_str, preserve_quotes=True)
ruamel.yaml.round_trip_dump(data, sys.stdout, explicit_start=True)

哪些输出(包括保留的评论):

---
my_vars:
my_env: "dev" # keep "dev" quoted
my_count: 3

加载字符串标量后将成为字符串的一个子类,以便能够容纳引用信息,但对于所有其他用途,它将像普通字符串一样工作。如果你想替换这样的字符串(devfgw)您必须将字符串转换为该子类(DoubleQuotedScalarString 来自 ruamel.yaml.scalarstring)。

默认情况下,往返 ruamel.yaml 会保留键的顺序(通过插入)。

关于python - pyyaml 并仅对字符串使用引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38369833/

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