我有一个带有短字符串属性的对象,以及一个长多行字符串属性.我想将短字符串写为YAML引用的标量,将多行字符串写为文字标量:
my_obj.short = "Hello"
my_obj.long = "Line1\nLine2\nLine3"
Run Code Online (Sandbox Code Playgroud)
我希望YAML看起来像这样:
short: "Hello"
long: |
Line1
Line2
Line3
Run Code Online (Sandbox Code Playgroud)
我怎样才能指示PyYAML这样做?如果我调用yaml.dump(my_obj)它,它会产生一个类似dict的输出:
{long: 'line1
line2
line3
', short: Hello}
Run Code Online (Sandbox Code Playgroud)
(不确定为什么长的是这样的双倍间距...)
我可以指示PyYAML如何对待我的属性吗?我想影响顺序和风格.
我有以下YAML文件:
---
my_vars:
my_env: "dev"
my_count: 3
Run Code Online (Sandbox Code Playgroud)
当我用PyYAML读取它并再次转储它时,我得到以下输出:
---
my_vars:
my_env: dev
my_count: 3
Run Code Online (Sandbox Code Playgroud)
有问题的代码:
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))
Run Code Online (Sandbox Code Playgroud)
我尝试使用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='"'))
Run Code Online (Sandbox Code Playgroud)
但现在我得到:
---
"my_vars":
"my_env": "dev"
"my_count": !!int "3"
Run Code Online (Sandbox Code Playgroud)
在不对 YAML文件中的变量名做任何假设的情况下,我需要做什么来保持原始格式?
我在散列中有很长的字符串值,希望在YAML中以文字块样式(以>或开头的块|)打印,而不是以行内字符串的形式打印。打电话时有办法强制执行此操作#to_yaml吗?
文字块样式的示例:
---
this: |
Foo
Bar
Run Code Online (Sandbox Code Playgroud) 我有我想要使用红宝石精极度紧张转储到YAML格式的数据(例如JSON)的大串,同时保留格式.
基本上,我希望JSON使用文字样式出现在YAML中:
---
json: |
{
"page": 1,
"results": [
"item", "another"
],
"total_pages": 0
}
Run Code Online (Sandbox Code Playgroud)
但是,当我使用YAML.dump它时不使用文字样式.我得到这样的东西:
---
json: ! "{\n \"page\": 1,\n \"results\": [\n \"item\", \"another\"\n ],\n \"total_pages\":
0\n}\n"
Run Code Online (Sandbox Code Playgroud)
我怎么能告诉Psych将scalars转换为想要的风格?
非常感谢Aaron Patterson提出的我正在扩展的解决方案:https://gist.github.com/2023978
虽然有点冗长,但这个要点是一种标记ruby中某些字符串的工作方式,使用YAML中的文字样式输出.
我需要将Python代码嵌入到YAML文档中.该文档最好是可移植的(标准YAML),或至少可由Python解析(例如使用PyYaml).
实际上我正在尝试将未修改的字符串包含到yaml属性中.应保留缩进和新行,以便稍后可以执行嵌入式Python代码.
我找到了'>',但它删除了换行符.
我已经添加了折叠字符串的表示符,如Python中的任何yaml库中提到的文字字符串,支持将长字符串转储为块文字或折叠块?.我还添加了representer来在转储的yaml内容中以块样式打印列表.
但问题是当字符串为空时,即""或列表为空时,它们在转储的YAML内容中以非块样式出现.
如何强制pyyaml转储器输出带有">"或"|"的空字符串 生成的YAML内容中的块样式中的flow_style = False的样式和空列表?