Python使用yaml.dump向已有YAML文件追加内容时如何正确设置缩进
问题原因
你现在的写法有两个核心错误,导致无法得到正确的嵌套结构:
- 用
'a'追加模式打开文件写入,本质是无结构的纯文本尾部拼接,完全不会识别原有YAML的节点层级,不可能自动把新内容挂载到stats节点下。 - 你构造的
FINAL_RESULT是独立的顶层字典,pushed_to、mappings都是这个字典的根级键,yaml.dump序列化时只会按照这个字典的结构输出根级节点,传入的indent参数仅控制序列化内容的内部缩进,不会凭空给所有输出增加前置缩进嵌入到原有文件的节点里。
正确实现方法
修改YAML不要用纯文本追加的思路,标准流程是先加载解析原有内容为内存对象,修改对应节点后全量序列化写回,具体实现如下:
- 读取原有YAML文件,解析为Python字典
- 直接在字典的
stats节点下新增pushed_to、mappings两个子属性 - 将修改后的完整字典序列化为YAML格式,覆盖写回原文件
参考代码:
import yaml file_path = "你的配置文件路径" # 这里替换成你实际的url值 source_url = "https://someurl.com" target_url = "https://anotherurl.com" # 读取解析原有YAML with open(file_path, 'r', encoding='utf-8') as f: config = yaml.safe_load(f) # 给stats节点追加需要的配置 config['stats']['pushed_to'] = [target_url] config['stats']['mappings'] = {source_url: target_url} # 全量覆盖写回文件,不要用追加模式 with open(file_path, 'w', encoding='utf-8') as f: yaml.dump( config, f, indent=2, # 和你原有文件的2空格缩进保持一致,需要4空格可自行修改 default_flow_style=False, allow_unicode=True )
注意事项
- 不要用手动给文本加前置空格的方式做纯文本拼接,这种硬编码方式适配性极差,一旦原有YAML的缩进、层级发生变化,很容易生成格式非法的YAML文件。
- 写回时必须用
'w'覆盖模式,不要用'a'追加模式,否则会在原有内容后面重复拼接新内容,导致文件结构混乱。
内容的提问来源于stack exchange,提问作者J Vipe
相关产品推荐
相关产品推荐

