好的,以下是一个更加灵活的 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 数据,查找与给定键名匹配的子项,并使用给定值更新它。如果没有找到匹配的子项,则继续递归搜索下一级子项。
这种方法可以处理键名和嵌套结构的任意组合,因此非常灵活。