如何使用PyYAML将输出合并到已有的YAML文件中?
解决YAML文件中packages列表合并问题
直接追加内容行不通?别硬怼字符串操作,用YAML解析工具处理才靠谱:
方法一:用Python的PyYAML库处理
适合需要脚本自动化的场景,步骤如下:
- 先安装PyYAML:
pip install pyyaml
- 编写处理脚本:
import yaml # 读取原foo.yaml文件内容 with open('foo.yaml', 'r') as f: original_data = yaml.safe_load(f) or {} # 解析待添加的字符串内容 add_content = """ packages: - 4 - 5 """ new_data = yaml.safe_load(add_content) or {} # 合并packages列表 if 'packages' in original_data: # 可选:去重,不需要的话直接用 original_data['packages'] += new_data['packages'] original_data['packages'] = list(set(original_data['packages'] + new_data['packages'])) else: original_data['packages'] = new_data['packages'] # 写回文件,自动处理换行与格式 with open('foo.yaml', 'w') as f: yaml.dump(original_data, f, sort_keys=False, indent=2)
这个脚本会自动处理换行符,不会出现\n被写入的问题,不管packages在文件哪个位置,都能正确合并。
方法二:用命令行工具yq处理
习惯命令行的话,yq是专门处理YAML的工具,操作更简洁:
先安装yq(Ubuntu用
sudo apt install yq,Mac用brew install yq)执行合并命令:
# 直接把指定项追加到原文件的packages列表,不存在则创建 yq eval '.packages += ["4", "5"]' foo.yaml -i
如果待添加内容来自文件,可改为:
yq eval '.packages += load("add_packages.yaml").packages' foo.yaml -i
命令会原地修改文件,自动处理YAML格式,完全不用操心换行符或packages的位置。
为啥不推荐直接追加字符串?
直接追加会导致packages:键重复,YAML解析时报错;而且字符串写入若没处理好换行,会把\n当成字符写入。用解析工具是按YAML结构操作,从根源避免这些问题。
内容的提问来源于stack exchange,提问作者SvGaming
相关产品推荐
相关产品推荐

