如何使用 ruamel.yaml 转储对应于列表的更改?
How can I dump changes corresponding to list using ruamel.yaml?
我在 How to auto-dump modified values in nested dictionaries using ruamel.yaml 的相关答案中使用解决方案
与 RoundTripRepresenter
.
如果我对 list
进行更改,ruamel.yaml
可以对局部变量进行更改,但不会 dump/write 将更改写入文件。有可能实现吗?
示例配置文件:
live:
- name: Ethereum
networks:
- chainid: 1
explorer: https://api.etherscan.io/api
例如,我将 name
更改为 alper
并尝试将新项目添加到列表中。
我的代码:
class YamlUpdate:
def __init__(self):
self.config_file = Path.home() / "alper.yaml"
self.network_config = Yaml(self.config_file)
self.change_item()
def change_item(self):
for network in self.network_config["live"]:
if network["name"] == "Ethereum":
network["name"] = "alper"
print(network)
network.append("new_item")
yy = YamlUpdate()
print(yy.config_file.read_text())
输出是 name
在原始文件上保持不变的地方:
{'name': 'alper', 'networks': [{'chainid': 1, 'explorer': 'https://api.etherscan.io/api'}]}
live:
- name: Ethereum
networks:
- chainid: 1
explorer: https://api.etherscan.io/api
我认为你应该考虑制作一个 class SubConfigList
,它的行为像一个列表,但通知它的 parent (在数据结构中),就像在其他答案中 SubConfig
通知其 parent.
您还需要确保将 SubConfigList
表示为 YAML 文档中的序列。
如果您要在数据结构的根部使用列表,则需要 list-like 替代 dict-like Config
。 (或记录您代码的 consumers/users,根始终需要是一个映射)。
我在 How to auto-dump modified values in nested dictionaries using ruamel.yaml 的相关答案中使用解决方案
与 RoundTripRepresenter
.
如果我对 list
进行更改,ruamel.yaml
可以对局部变量进行更改,但不会 dump/write 将更改写入文件。有可能实现吗?
示例配置文件:
live:
- name: Ethereum
networks:
- chainid: 1
explorer: https://api.etherscan.io/api
例如,我将 name
更改为 alper
并尝试将新项目添加到列表中。
我的代码:
class YamlUpdate:
def __init__(self):
self.config_file = Path.home() / "alper.yaml"
self.network_config = Yaml(self.config_file)
self.change_item()
def change_item(self):
for network in self.network_config["live"]:
if network["name"] == "Ethereum":
network["name"] = "alper"
print(network)
network.append("new_item")
yy = YamlUpdate()
print(yy.config_file.read_text())
输出是 name
在原始文件上保持不变的地方:
{'name': 'alper', 'networks': [{'chainid': 1, 'explorer': 'https://api.etherscan.io/api'}]}
live:
- name: Ethereum
networks:
- chainid: 1
explorer: https://api.etherscan.io/api
我认为你应该考虑制作一个 class SubConfigList
,它的行为像一个列表,但通知它的 parent (在数据结构中),就像在其他答案中 SubConfig
通知其 parent.
您还需要确保将 SubConfigList
表示为 YAML 文档中的序列。
如果您要在数据结构的根部使用列表,则需要 list-like 替代 dict-like Config
。 (或记录您代码的 consumers/users,根始终需要是一个映射)。