python – pyyaml并仅使用字符串引号
发布时间:2020-12-16 23:25:55 所属栏目: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(yaml.dump(env_dict,indent
我有以下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,explicit_start=True,default_style='"')) 但现在我得到: --- "my_vars": "my_env": "dev" "my_count": !!int "3" 在不对YAML文件中的变量名做任何假设的情况下,我需要做什么来保持原始格式? 解决方法
我建议您使用向后兼容的
ruamel.yaml 软件包更新为使用YAML 1.2(2009年发布),而不是使用实现大部分YAML 1.1(2005)的PyYAML. (免责声明:我是该套餐的作者).
然后,在加载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时,会保留键的顺序(通过插入). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |