【问题标题】:strange output from yaml.dumpyaml.dump 的奇怪输出
【发布时间】:2013-06-04 07:17:33
【问题描述】:

我刚开始使用 yaml,我喜欢它。然而,前几天我遇到了一个看起来很奇怪的案例,我不确定是什么原因造成的。我有一个文件路径位置列表和另一个文件路径目标列表。我用它们创建了一个字典,然后使用 yaml 将其转储出来以供以后阅读(我与艺术家合作并使用 yaml,因此它也可供人类阅读)。

抱歉,列表太长了:

source = ['/data/job/maze/build/vehicle/blackhawk/blackhawkHelicopter/work/data/map/tasks/model/v026_03/blackhawk_diff.exr', '/data/job/maze/build/vehicle/blackhawk/blackhawkHelicopter/work/data/map/tasks/model/v026_03/blackhawk_maskTapeFloor.1051.exr', '/data/job/maze/build/vehicle/blackhawk/blackhawkHelicopter/work/data/map/tasks/model/v026_03/blackhawk_maskBurnt.1031.exr']
dest = ['/data/job/maze/build/vehicle/blackhawk/blackhawkHelicopter/work/data/map/tasks/texture/v0006/blackhawk_diff_diffuse_v0006.exr', '/data/job/maze/build/vehicle/blackhawk/blackhawkHelicopter/work/data/map/tasks/texture/v0006/blackhawk_maskTapeFloor_diffuse_v0006.1051.exr', '/data/job/maze/build/vehicle/blackhawk/blackhawkHelicopter/work/data/map/tasks/texture/v0006/blackhawk_maskBurnt_diffuse_v0006.1031.exr']
dictionary = dict(zip(source, dest))
print yaml.dump(dictionary)

这是我得到的输出:

{/data/job/maze/build/vehicle/blackhawk/blackhawkHelicopter/work/data/map/tasks/model/v026_03/blackhawk_diff.exr: /data/job/maze/build/vehicle/blackhawk/blackhawkHelicopter/work/data/map/tasks/texture/v0006/blackhaw
k_diff_diffuse_v0006.exr,
  /data/job/maze/build/vehicle/blackhawk/blackhawkHelicopter/work/data/map/tasks/model/v026_03/blackhawk_maskBurnt.1031.exr: /data/job/maze/build/vehicle/blackhawk/blackhawkHelicopter/work/data/map/tasks/texture/v00
06/blackhawk_maskBurnt_diffuse_v0006.1031.exr,
  ? /data/job/maze/build/vehicle/blackhawk/blackhawkHelicopter/work/data/map/tasks/model/v026_03/blackhawk_maskTapeFloor.1051.exr
  : /data/job/maze/build/vehicle/blackhawk/blackhawkHelicopter/work/data/map/tasks/texture/v0006/blackhawk_maskTapeFloor_diffuse_v0006.1051.exr}

它与 yaml.load 一起返回很好,但这对于艺术家在需要时能够进行编辑没有用处。

【问题讨论】:

  • 您希望得到什么样的输出?
  • @JeremyBanks:大概他希望块样式而不是流样式。

标签: python yaml


【解决方案1】:

这是the FAQ的第一个问题。

默认情况下,PyYAML 根据是否有嵌套集合来选择集合的样式。如果一个集合有嵌套集合,它将被分配块样式。否则就会有流式风格。

如果您希望集合始终以块样式进行序列化,请将 dump() 的参数 default_flow_style 设置为 False。

所以:

>>> print yaml.dump(dictionary, default_flow_style=False)
/data/job/maze/build/vehicle/blackhawk/blackhawkHelicopter/work/data/map/tasks/model/v026_03/blackhawk_diff.exr: /data/job/maze/build/vehicle/blackhawk/blackhawkHelicopter/work/data/map/tasks/texture/v0006/blackhawk_diff_diffuse_v0006.exr
/data/job/maze/build/vehicle/blackhawk/blackhawkHelicopter/work/data/map/tasks/model/v026_03/blackhawk_maskBurnt.1031.exr: /data/job/maze/build/vehicle/blackhawk/blackhawkHelicopter/work/data/map/tasks/texture/v0006/blackhawk_maskBurnt_diffuse_v0006.1031.exr
? /data/job/maze/build/vehicle/blackhawk/blackhawkHelicopter/work/data/map/tasks/model/v026_03/blackhawk_maskTapeFloor.1051.exr
: /data/job/maze/build/vehicle/blackhawk/blackhawkHelicopter/work/data/map/tasks/texture/v0006/blackhawk_maskTapeFloor_diffuse_v0006.1051.exr

仍然不是很漂亮,但是当您有超过 80 个字符的字符串作为键时,它与您合理预期的一样好。

如果您在对象层次结构中对文件系统层次结构(部分)进行建模,或者为树的某些部分创建别名(或动态别名)等,YAML 看起来会好很多。但这是你必须在对象模型级别实际做的事情;就 YAML 而言,那些充满重复前缀的长路径只是字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-03
    • 2015-02-18
    • 2011-06-14
    • 2021-02-08
    • 2014-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多