如何用ruamel.yaml为JFrog YAML用户列表添加带行尾注释的新用户
使用ruamel.yaml为JFrog YAML组添加带行尾注释的用户
核心问题
ruamel.yaml默认添加列表元素时不会关联行尾注释,且非往返模式会破坏原文件格式,需针对性配置和注释绑定操作。
解决步骤
1. 加载YAML时保留原格式与注释
使用ruamel.yaml的往返模式(typ='rt')加载文件,确保原注释、缩进等格式被完整保留:
from ruamel.yaml import YAML # 初始化往返模式的YAML处理器,保留引号和原格式 yaml = YAML(typ='rt') yaml.preserve_quotes = True with open('jfrog_config.yaml', 'r') as f: config = yaml.load(f)
2. 为新增用户绑定行尾注释
目标组的userNames是CommentedSeq类型,可通过yaml_add_eol_comment方法为新增元素绑定行尾注释:
new_user_id = 'usermd' comment_content = f'{new_user_id} - usermd@yourdomain.com' # 处理Developers组 dev_user_list = config['Developers']['userNames'] dev_user_list.append(new_user_id) # 为最后一个元素添加行尾注释,indent需匹配原文件列表缩进 dev_user_list.yaml_add_eol_comment(comment_content, len(dev_user_list)-1, indent=2) # 处理Admins组 admin_user_list = config['Admins']['userNames'] admin_user_list.append(new_user_id) admin_user_list.yaml_add_eol_comment(comment_content, len(admin_user_list)-1, indent=2)
注意:
indent参数要和原文件中列表元素的缩进值一致,比如原文件用2空格缩进就设为2,避免格式错乱。
3. 保存更新后的YAML文件
直接用往返模式处理器写入文件,自动保留原格式:
with open('jfrog_config_updated.yaml', 'w') as f: yaml.dump(config, f)
关键提示
- 必须启用
typ='rt'模式,否则无法处理注释关联和格式保留 - 新增元素后需立即添加注释,确保注释与元素绑定
- 缩进参数必须匹配原文件,否则会导致输出格式混乱
内容的提问来源于stack exchange,提问作者oruganti sivamuralikrishna
相关产品推荐
相关产品推荐

