【发布时间】:2014-07-17 20:08:15
【问题描述】:
我有一个 Python dict,它来自使用通常的方式读取 YAML 文件
yaml.load(stream)
我想以编程方式更新 YAML 文件,给定要更新的路径,例如:
组1,选项1,选项11,值
并将生成的 dict 再次保存为 yaml 文件。我面临更新字典的问题,考虑到路径是动态的(假设用户能够通过我使用 Cmd 创建的简单 CLI 输入路径)。
有什么想法吗?
谢谢!
更新 让我更具体地说明这个问题:问题在于更新我事先不知道结构的字典的一部分。我正在开发一个项目,其中所有配置都存储在 YAML 文件中,我想添加一个 CLI 以避免手动编辑它们。这是一个示例 YAML 文件,使用 PyYaml 加载到字典 (config-dict):
config:
a-function: enable
b-function: disable
firewall:
NET:
A:
uplink: enable
downlink: enable
B:
uplink: enable
downlink: enable
subscriber-filter:
cancellation-timer: 180
service:
copy:
DS: enable
remark:
header-remark:
DSC: enable
remark-table:
port:
linkup-debounce: 300
p0:
mode: amode
p1:
mode: bmode
p2:
mode: amode
p3:
mode: bmode
我已经使用 Cmd 创建了 CLI,即使使用自动完成功能它也能很好地工作。用户可以提供如下一行:
config port p1 mode amode
所以,我需要编辑:
config-dict['config']['port']['p1']['mode'] 并将其设置为 'amode'。然后,使用 yaml.dump() 再次创建文件。另一个可能的行是:
config a-function enable
所以 config-dict['config']['a-function'] 必须设置为 'enable'。
我的问题是更新字典时。如果 Python 将值作为引用传递会很容易:只需遍历 dict 直到找到正确的值并保存它。实际上,这就是我为 Cmd 自动完成所做的事情。但我不知道如何进行更新。
希望我现在能更好地解释自己!
提前致谢。
【问题讨论】:
-
保存到 YAML 很容易
yaml.dump,但您要求设计您的应用程序。这太难了,基于意见,实际上与 YAML 没有太大关系。 -
@JanVlcinsky 感谢您的回答。你是对的,我问的更多是关于 Python 而不是 YAML 本身。这与设计无关,而是一个非常具体的问题:如何更新具有动态大小的字典。
-
呃,我在这里没有看到问题 - 真正直接的方法是解析 cli 上给出的路径,遍历字典以确保路径有效,更改值,转储.问题出在哪里?除此之外 - 你试过什么,什么没用,粘贴一些代码。