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

Python批量替换txt文件关键词转存新文件夹 代码运行异常

问题概述
  • 实现需求:借助字典结构存储键值对替换映射,批量替换指定文件夹下所有.txt文件中的关键词,将修改后的文件保存至新的目标路径。
  • 故障表现:代码运行后持续卡顿无响应,强制中断程序后仅生成一个空文件,未实现预期批量处理效果。
原代码核心问题
  • 缩进错误导致逻辑完全错位:遍历文件的for循环仅包含路径拼接、打开文件三个操作,读取内容、替换关键词、写入文件的逻辑全部在循环体外。循环执行时只会反复打开目录下的所有文件但不做任何处理,循环结束后仅会操作最后一次打开的文件,且之前打开的文件全部未正常关闭,存在资源泄漏。
  • 未做文件类型过滤:os.listdir会列出目录下所有子文件夹、非txt格式文件,直接尝试打开会触发权限错误、读取格式错误。
  • 程序卡顿的根因:写入文件前错误调用input()函数,该函数会阻塞进程等待用户手动输入内容,若用户未注意控制台的输入提示,程序会一直挂起,表现为无响应卡顿。强制中断程序时写入操作未完成,自然只会生成空文件。
  • 兼容性不足:文件读写未指定编码,遇到非系统默认编码的文件会出现乱码;未提前判断目标输出目录是否存在,路径不存在时直接写入会触发报错。
  • 字典加载逻辑鲁棒性差:读取替换字典时未跳过空行,若字典文件存在空行、或替换值中包含冒号,会触发分割报错导致程序中断。
修正后可运行代码
import os
from pathlib import Path

# 路径配置
source_dir = Path("C:\\Users\\myuser\\Documents\\scripts")
target_dir = Path("C:\\Users\\myuser\\Documents\\scripts_new")
dict_path = Path("C:\\Users\\myuser\\Desktop\\Python\\dictionary.txt")

# 自动创建目标输出目录,已存在则不重复创建
target_dir.mkdir(parents=True, exist_ok=True)

# 加载键值对替换字典
replace_dict = {}
with open(dict_path, "r", encoding="utf-8") as f:
    for line in f:
        line = line.strip()
        # 跳过字典文件中的空行,避免分割报错
        if not line:
            continue
        # 仅按第一个冒号分割,兼容替换值中包含冒号的场景
        k, v = line.split(':', 1)
        replace_dict[k.strip()] = v.strip()

# 遍历源目录处理所有txt文件
for filename in os.listdir(source_dir):
    source_file = os.path.join(source_dir, filename)
    # 跳过子目录、非txt格式文件
    if not os.path.isfile(source_file) or not filename.lower().endswith(".txt"):
        continue
    # 读取原文件内容
    with open(source_file, "r", encoding="utf-8") as f:
        content = f.read()
    # 批量替换关键词
    for old_str, new_str in replace_dict.items():
        content = content.replace(old_str, new_str)
    # 写入目标路径
    target_file = os.path.join(target_dir, filename)
    with open(target_file, "w", encoding="utf-8") as f:
        f.write(content)
关键修正点
  • 调整代码缩进,将文件读取、内容替换、写入的全流程放入文件遍历循环内部,确保每个符合要求的txt文件都能被正常处理。
  • 统一使用with上下文管理器处理所有文件读写操作,自动完成文件资源释放,同时指定utf-8编码规避乱码问题。
  • 新增文件过滤逻辑,仅处理源目录下后缀为.txt的普通文件,自动跳过子文件夹和其他格式文件,减少无效报错。
  • 移除导致程序阻塞的input()调用,替换完成后直接将处理后的内容写入目标文件,解决程序卡顿无响应的问题。
  • 新增目标目录自动创建逻辑,无需手动提前新建输出文件夹。
  • 优化字典加载逻辑,支持空行跳过、替换值包含冒号的场景,提升代码容错性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 00:33:22