Python使用re库批量替换文件内容仅最后一次修改生效问题求助
问题根因
你的代码存在两处逻辑错误,直接导致替换结果无法累积:
- 每次循环都基于原始的
user_data执行替换,上一轮的替换结果没有被保留到下一轮 - 写入文件的操作放在了循环内部,每次循环都会写入仅完成单条替换的内容,最终文件仅保留最后一次写入的结果
修复代码
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
相关产品推荐
相关产品推荐

