您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – pyyaml并仅使用字符串引号

5b51 2022/1/14 8:22:54 python 字数 2840 阅读 622 来源 www.jb51.cc/python

我有以下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(yam

概述

---
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,explicit_start=True,default_style='"'))

但现在我得到:

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

在不对YAML文件中的变量名做任何假设的情况下,我需要做什么来保持原始格式?

然后,在加载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

加载字符串后,标量将是字符串的子类,以便能够容纳引用信息,但是对于所有其他目的,它将像普通字符串一样工作.如果你想替换这样的字符串(dev to fgw)
你必须将字符串强制转换为此子类(来自ruamel.yaml.scalarstring的DoubleQuotedScalarString).

认情况下舍入ruamel.yaml时,会保留键的顺序(通过插入).

总结

以上是编程之家为你收集整理的python – pyyaml并仅使用字符串引号全部内容,希望文章能够帮你解决python – pyyaml并仅使用字符串引号所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶