我有一个yaml文档,如下所示。
doc="""
... network-interface: >
... auto $(intf)
... iface $(intf) inet static
... address $(addr)
... network $(net)
... netmask $(mask)
... """我正在加载这个文档并获取python字典。我正在尝试将此文档转换回我的原始文档,但我得到了'\n‘字符。
ydict = yaml.load(doc)
ndoc = yaml.dump(ydict)
print ndoc
{network-interface: "auto $(intf)\n iface $(intf) inet static\n address $(addr)\n\
\ network $(net)\n netmask $(mask)\n"}
print yaml.dump(ydict, default_flow_style=False)
network-interface: "auto $(intf)\n iface $(intf) inet static\n address $(addr)\n\
\ network $(net)\n netmask $(mask)\n"如何在没有'\n‘的情况下取回原始文档。
发布于 2015-04-17 05:34:38
您可以使用folded block style指定字符串,但是在以'iface`‘开头的行上进行额外的缩进会导致出现’硬‘换行符。
如果将这些行对齐:
import yaml
doc="""
network-interface: >
auto $(intf)
iface $(intf) inet static
address $(addr)
network $(net)
netmask $(mask)
"""
ydict = ruamel.yaml.load(doc, Loader=ruamel.yaml.RoundTripLoader)
ndoc = ruamel.yaml.dump(ydict, Dumper=ruamel.yaml.RoundTripDumper)
ydict = ruamel.yaml.load(doc)
ndoc = ruamel.yaml.dump(ydict)
print ndoc您将获得:
{network-interface: 'auto $(intf) iface $(intf) inet static address $(addr) network
$(net) netmask $(mask)
'}如果您希望您的输出YAML更接近于您的输入,您应该考虑使用ruamel.yaml (我是它的作者)并使用literal style (|):
import ruamel.yaml
doc="""
network-interface: |
auto $(intf)
iface $(intf) inet static
address $(addr)
network $(net)
netmask $(mask)
"""
ydict = ruamel.yaml.load(doc, Loader=ruamel.yaml.RoundTripLoader)
ndoc = ruamel.yaml.dump(ydict, Dumper=ruamel.yaml.RoundTripDumper)
print ndoc为您提供:
network-interface: |
auto $(intf)
iface $(intf) inet static
address $(addr)
network $(net)
netmask $(mask)https://stackoverflow.com/questions/29621387
复制相似问题