这是一个配置文件,我用PyYAML来改变它的一些值,然后我写一些配置文件,但是它会改变我的格式,这让我很困惑。在
$ results.yaml
nas:
mount_dir: '/nvr'
mount_dirs: ['/mount/data0', '/mount/data1', '/mount/data2']
# yaml.py
import yaml.py
conf = open("results.conf", "r")
results = yaml.load(conf)
conf.close()
result['nas']['mount_dirs'][0]= "haha"
with open('/home/zonion/speedio/speedio.conf', 'w') as conf:
yaml.dump(speedio, conf, default_flow_style=False)
conf.close()
但它改变了我的格式,我该怎么办?在
^{pr2}$
ruamel实现了一个往返加载程序和转储程序,请尝试:
如果您使用^{} ¹,通过在StackOverlow上组合this和this答案,可以相对容易地实现这一点。在
默认情况下,
ruamel.yaml
标准化为缩进2,并删除多余的引号。{1{或者不想显式地分析}的输入,并告诉它:代替
^{pr2}$load_yaml_guess_indent()
调用,您可以:如果要在输出中引用
haha
,请使其成为SingleQuotedScalarString
:这样,输出将是:
(假定您的简短示例输入没有块样式序列,则
block_sequence_indent
无法确定,并且将为None)使用较新的API时,您可以分别控制映射和序列的缩进:
这将使您的YAML格式保持一致,如果不是这样开始的话,并且在第一次往返之后没有进一步的更改。在
¹免责声明:我是该软件包的作者。
ruamel.yaml
不幸的是,没有完全保留原始格式,引用其docs:我不知道有哪个Python库能做到这一点。在
当我需要在不触及YAML文件格式的情况下更改YAML文件时,我不情愿地使用regexp(因为它几乎和parsing XHTML with it一样糟糕)。在
请随时提出更好的解决方案,如果你知道的话,我很乐意了解它!在
相关问题 更多 >
编程相关推荐