Python中是否有任何支持将长字符串转储为块文字或折叠块的yaml库?
|
我希望能够转储包含我希望以块样式包含的长字符串的字典以提高可读性。例如:
foo: |
this is a
block literal
bar: >
this is a
folded block
PyYAML支持这种样式的文档加载,但是我似乎找不到找到这种方式转储文档的方法。我想念什么吗?
没有找到相关结果
已邀请:
3 个回复
茶鬼失形
结果:
为了完整起见,还应该有str实现,但是我会很懒惰:-)
诫商
支持转储字面量或折叠的块。 使用
定义类型:
然后,您可以定义这些类型的表示形式。 请注意,尽管Gary \的解决方案非常适合unicode,但您可能还需要做更多的工作才能使字符串正常工作(请参见describe_str的实现)。
然后,您可以将这些表示符添加到默认的转储程序中:
...并对其进行测试:
结果:
使用
如果您希望所有字符串都遵循默认样式,也可以使用
关键字参数,例如:
或折叠文字:
或双引号文字:
注意事项: 这是您可能不会想到的示例:
结果是:
1)不可打印的字符 有关转义字符,请参见YAML规范(第5.7节): 请注意,转义序列仅以双引号标量解释。在所有其他标量样式中,“ \\”字符没有特殊含义,并且不可打印字符不可用。 如果要保留不可打印的字符(例如TAB),则需要使用双引号标量。如果您能够转储具有文字样式的标量,并且其中存在不可打印的字符(例如TAB),则说明您的YAML转储器不兼容。 例如。即使指定了默认样式,3ѭ也会检测不可打印字符character18ѭ并使用双引号样式:
2)前导和尾随空格 规范中的另一有用信息是: 内容中不包括所有前导和尾随空格字符 这意味着,如果您的字符串确实有前导或尾随空格,则这些字符串将不会以标量样式保留,而不能使用双引号。结果,ѭ3试图检测标量中的内容,并可能强制使用双引号样式。
呈辖玫割善
)所代表
这使:
属性要求可逆的可迭代值,表示位置 指示折叠位置的空间。 如果您的字符串中从来没有竖线字符(\'| \'), 可以做类似的事情:
这也可以准确给出您期望的输出