相关疑难解决方法(0)

如何控制PyYAML用于数据的标量形式?

我有一个带有短字符串属性的对象,以及一个长多行字符串属性.我想将短字符串写为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如何对待我的属性吗?我想影响顺序和风格.

python yaml pyyaml

21
推荐指数
5
解决办法
9695
查看次数

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文件中的变量名做任何假设的情况下,我需要做什么来保持原始格式?

python quotes pyyaml

8
推荐指数
3
解决办法
7583
查看次数

如何强制to_yaml以文字块样式输出长字符串?

我在散列中有很长的字符串值,希望在YAML中以文字块样式(以>或开头的块|)打印,而不是以行内字符串的形式打印。打电话时有办法强制执行此操作#to_yaml吗?

文字块样式的示例:

---
this: |
  Foo
  Bar
Run Code Online (Sandbox Code Playgroud)

ruby yaml

5
推荐指数
1
解决办法
619
查看次数

如何使用文字标量样式在YAML中转储字符串?

我有我想要使用红宝石精极度紧张转储到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中的文字样式输出.

ruby string yaml psych

5
推荐指数
1
解决办法
2537
查看次数

如何将Python代码嵌入到YAML中?

我需要将Python代码嵌入到YAML文档中.该文档最好是可移植的(标准YAML),或至少可由Python解析(例如使用PyYaml).

实际上我正在尝试将未修改的字符串包含到yaml属性中.应保留缩进和新行,以便稍后可以执行嵌入式Python代码.

我找到了'>',但它删除了换行符.

python yaml

4
推荐指数
1
解决办法
4368
查看次数

在Pyyaml中,如何用块样式表示空字符串和列表?

我已经添加了折叠字符串的表示符,如Python中的任何yaml库中提到的文字字符串,支持将长字符串转储为块文字或折叠块?.我还添加了representer来在转储的yaml内容中以块样式打印列表.

但问题是当字符串为空时,即""或列表为空时,它们在转储的YAML内容中以非块样式出现.

如何强制pyyaml转储器输出带有">"或"|"的空字符串 生成的YAML内容中的块样式中的flow_style = False的样式和空列表?

string yaml dump pyyaml empty-list

2
推荐指数
1
解决办法
1793
查看次数

标签 统计

yaml ×5

python ×3

pyyaml ×3

ruby ×2

string ×2

dump ×1

empty-list ×1

psych ×1

quotes ×1