python读取json文件,并根据yaml值修改json文件

这个Python3代码示例展示了如何读取JSON和YAML文件,根据YAML配置生成多个新的JSON文件。程序遍历YAML配置,如果值是列表,则对每个值更新JSON数据并写入新文件;否则,直接更新JSON数据。利用递归函数处理嵌套结构,适应灵活的键名和结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

好的,以下是一个更加灵活的 Python 3 示例代码,用于读取 JSON 文件和 YAML 文件,并根据 YAML 文件中的数据生成多个新的 JSON 文件。

```python
import json
import yaml

# Load YAML file
with open('config.yaml', 'r') as f:
    config_data = yaml.safe_load(f)

# Load JSON file
with open('input.json', 'r') as f:
    json_data = json.load(f)

# Loop through configuration and generate new JSON files
for key, value in config_data.items():
    if isinstance(value, list):
        # Update JSON data based on YAML config
        for item in value:
            json_data = update_json(json_data, key, item)

            # Write updated JSON to new file
            output_file_name = f'output_{key}_{item}.json'
            with open(output_file_name, 'w') as f:
                json.dump(json_data, f)
    else:
        # Update JSON data based on YAML config
        json_data = update_json(json_data, key, value)

# Helper function to update JSON data based on key-value pairs from YAML config
def update_json(json_data, key, value):
    if key in json_data:
        json_data[key] = value
    else:
        for k, v in json_data.items():
            if isinstance(v, dict):
                update_json(v, key, value)
    return json_data
```

在这个示例中,我们首先使用 `open()` 函数打开要读取的 YAML 文件并将其加载到内存中。然后,我们使用 `open()` 函数再次打开要读取的原始 JSON 文件,将其加载到内存中。

接下来,我们循环遍历 YAML 配置文件,对于每个键值对,我们首先判断它的值是否为列表,如果是,则在其中循环遍历对应的值数组,并使用它们更新 JSON 数据。对于每个新文件,我们使用 YAML 配置文件中的键名和值来生成文件名称,并使用 `json.dump()` 方法将更新后的 JSON 数据写入新文件中。

如果值不是列表,那么我们假设它是一个单独的值,直接使用它来更新 JSON 数据。

为了更好地实现更新 JSON 数据的功能,我们还编写了一个辅助函数 `update_json()`,该函数递归遍历 JSON 数据,查找与给定键名匹配的子项,并使用给定值更新它。如果没有找到匹配的子项,则继续递归搜索下一级子项。

这种方法可以处理键名和嵌套结构的任意组合,因此非常灵活。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值