如何防止 YAML 在没有新行的情况下转储长行

Posted

技术标签:

【中文标题】如何防止 YAML 在没有新行的情况下转储长行【英文标题】:How to prevent YAML to dump long line without new line 【发布时间】:2013-09-02 01:54:13 【问题描述】:

在转储/序列化输入中具有长行的数据时,pyyaml 会在新行中添加额外的缩进 - 这很烦人,我们如何避免在两行/多行中进行这种转换?

例如

在 [1] 中:

x = "-c /home/user/test/test2/test23/tet/2s/test1/stest/longdirectory1/directory2/ --optnion12 --verbose"

在[2]中:import yaml

在[3]中:print (yaml.dump([dict(ATTRIBUTES=[dict(CONFIG=x)])], default_flow_style=False))

一个错误

- ATTRIBUTES:
  - CONFIG: -c /home/user/test/test2/test23/tet/2s/test1/stest/longdirectory1/directory2/
      --optnion12 --verbose

应该是这样的

- ATTRIBUTES:
  - CONFIG: -c /home/user/test/test2/test23/tet/2s/test1/stest/longdirectory1/directory2/ --optnion12 --verbose

【问题讨论】:

你看到options of dump了吗?我没有测试它,但似乎有些选项可以帮助你。 @MathieuMarques 谢谢,这是我应该寻找的。它奏效了。 【参考方案1】:

感谢@MathieuMarques 建议查看@dump 选项和提供的链接,YAML 文档不够好,无法找到它。

无论如何,解决方案是为dump 函数指定width 参数。

yaml.dump(data, width=1000)

@RandomCoder 建议的一种更好的方法是使用yaml.dump(data, width=float("inf")) 作为永久解决方案。

【讨论】:

更永久的解决方案是:yaml.dump(data, width=float("inf")) 但是,在使用更快的基于 C (LibYAML) 的转储程序(例如 Dumper=yaml.CSafeDumper)时,您不能使用 width=float("inf")。在这种情况下,width=2147483647 之类的就足够了。 或者你可以使用width=math.inf,它可能比float("inf")更具可读性(你需要import math)。

以上是关于如何防止 YAML 在没有新行的情况下转储长行的主要内容,如果未能解决你的问题,请参考以下文章

如何防止我的程序出现此分段错误(核心转储)?

如何防止 Spring Boot 解析带点的 YAML 键

在 Prettier 中,如何防止 HTML 结束标记的“>”字符被放置在新行上?

你如何防止 yaml-cpp 解析器删除所有注释?

如何在 React 中防止带有 TypeWriter 效果的新行?

按下 Enter 后如何防止 StyledText 中的新行