You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用yaml.dump写入yml文件重复追加 如何仅写入一次?

问题根因

你出现重复写入的核心原因是打开yml文件时用了'a'追加模式,每次脚本运行都会在原有文件末尾追加相同内容,执行多少次就会重复多少次。同时你的现有遍历逻辑有冗余:逐行遍历csv时,同一个NAME的条目会触发多次写入操作,也会额外增加重复风险。

修复方案

你只需要做两处调整即可实现需求:

  • 将文件打开模式从追加'a'改为覆盖'w',每次写入直接覆盖旧文件内容,保证文件里永远只有最新的一份数据
  • 优化遍历逻辑,先对csv的NAME字段去重,避免同一个pack被重复处理多次

后续如果csv里的数据有更新,直接运行脚本就会自动同步更新所有yml文件内容,不会产生重复。

修复后完整代码
import pandas
import os
import pathlib
import yaml

# 读取csv文件
df = pandas.read_csv('Keywords.csv', sep=';')

# 先对NAME去重,避免重复处理同一个pack
for pack_name in df['NAME'].unique():
    if not pack_name:
        continue
    print(pack_name)
    
    # 创建目录,exist_ok=True表示目录存在也不报错,无需额外判断
    pack_path = pathlib.Path(f"packs/{pack_name}")
    pack_path.mkdir(exist_ok=True)
    
    # 筛选当前pack对应的数据
    pack_data = df.loc[df['NAME'] == pack_name].to_dict(orient='records')
    
    # 用w覆盖模式写入,代替原来的a追加模式
    with open(pack_path / 'config.yml', 'w', encoding='utf-8') as outfile:
        yaml.dump_all(
            pack_data,
            outfile,
            sort_keys=False,
            indent=4
        )

内容的提问来源于stack exchange,提问作者gospecomid12

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 19:45:04