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

Python使用re库批量替换文件内容仅最后一次修改生效问题求助

问题根因

你的代码存在两处逻辑错误,直接导致替换结果无法累积:

  1. 每次循环都基于原始的user_data执行替换,上一轮的替换结果没有被保留到下一轮
  2. 写入文件的操作放在了循环内部,每次循环都会写入仅完成单条替换的内容,最终文件仅保留最后一次写入的结果

修复代码

import csv
import re

with open(KEY_FILE, mode='r', encoding='utf-8-sig') as f:
    replacements = list(csv.DictReader(f))  # 转成列表避免迭代器只能遍历一次的问题

# 读取原始待替换内容
with open(temp_file, 'r', encoding='utf-8') as f:
    current_data = f.read()

# 迭代所有替换规则,累积替换结果
for col in replacements:
    original_str = col[ORIGINAL_COLUMN]
    target_str = col[TARGET_COLUMN]
    compiled = re.compile(re.escape(original_str), re.IGNORECASE)
    current_data = compiled.sub(target_str, current_data)

# 所有替换完成后一次性写入文件
with open(test_file, 'w', encoding='utf-8') as a:
    a.write(current_data)

关键修改说明

  • 新增current_data变量承载累积的替换结果,每轮替换都基于上一轮修改后的内容执行,和你原有字符串替换的user_data = user_data.replace()逻辑完全对齐
  • 将csv.DictReader的结果转为列表,避免迭代器仅能遍历一次的潜在问题
  • 把文件写入操作移到循环外部,所有替换完成后再写入最终结果
  • 所有文件操作都使用with上下文管理器,自动处理文件关闭,无需手动调用close(),避免资源泄露

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:06:07