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
相关产品推荐
相关产品推荐

