Python如何从复杂YAML文件提取指定键生成新YAML文件
根因说明
你当前输出丢失外层键的原因是:调用yaml.dump时仅传入了cfg['ab']、cfg['thisone']对应的取值,没有将外层键和对应值打包为新的字典结构,dump时自然不会生成外层键名。
最优实现方案
直接构造仅包含目标键的新字典,再对这个新字典执行dump操作即可,示例代码如下:
import yaml # 加载原YAML文件,推荐使用safe_load避免任意代码执行安全风险 with open("source.yaml", "r", encoding="utf-8") as f: cfg = yaml.safe_load(f) # 构造仅保留目标键的新字典 new_cfg = { "ab": cfg["ab"], "thisone": cfg["thisone"] } # 写入新YAML文件 # 传入sort_keys=False可以保留键的原始顺序,避免被自动按字母排序 # 传入allow_unicode=True避免中文等非ASCII字符被转义 with open("target.yaml", "w", encoding="utf-8") as f: yaml.dump(new_cfg, f, sort_keys=False, allow_unicode=True)
如果后续需要保留的键较多,可以用更灵活的列表推导写法,同时兼容键不存在的场景:
# 定义所有需要保留的外层键 keep_keys = ["ab", "thisone"] # 仅保留存在于原配置中的键,避免KeyError new_cfg = {key: cfg[key] for key in keep_keys if key in cfg}
运行上述代码后生成的新YAML文件就会完全符合你需要的格式。
内容的提问来源于stack exchange,提问作者JrRockeTer
相关产品推荐
相关产品推荐

