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

Python批量文本规则替换及文件输出格式异常问题求解

修正后的实现方案

核心改动说明

  • 补全缺失的os依赖库导入
  • 采用正则优先匹配排除项的逻辑:先匹配xx:xx:xx格式时间、以H结尾的字符串,匹配到直接返回原内容不处理
  • 新增@结尾字符串处理逻辑:匹配到后移除末尾@,字符间插入空格后统一转大写
  • 新增纯数字串处理逻辑:逐位映射为对应英文单词,单词间加空格
  • 修正文件读写逻辑:用with上下文管理器管理文件句柄,每个文件单独完成读→处理→写的全流程,保留原文本换行格式
  • 替换路径拼接逻辑为os.path.join,兼容不同系统的路径格式

完整可运行代码

import re
import os

dest1 = r"C:\Users\CL\Desktop\Folder"
# 数字映射字典,去掉多余空格,后续拼接时统一处理
num_map = {"0":"ZERO", "1":"ONE", "2":"TWO", "3":"THREE", "4":"FOUR", 
           "5":"FIVE", "6":"SIX", "7":"SEVEN", "8":"EIGHT", "9":"NINE"}

def replace_logic(match):
    # 分组1是时间格式,分组2是H结尾的字符串,直接返回原内容
    if match.group(1) or match.group(2):
        return match.group()
    # 分组3是@结尾的字符串
    elif match.group(3):
        content = match.group(3)[:-1] # 去掉末尾的@
        return ' '.join(list(content.upper()))
    # 分组4是纯数字串
    elif match.group(4):
        return ' '.join([num_map[c] for c in match.group(4)])

for filename in os.listdir(dest1):
    file_path = os.path.join(dest1, filename)
    # 只处理文本文件,过滤文件夹
    if not os.path.isfile(file_path):
        continue
    # 读取文件内容,指定编码避免乱码
    with open(file_path, 'r', encoding='utf-8') as f:
        content = f.read()
    # 正则匹配:时间|H结尾字符串|@结尾字符串|纯数字串
    processed = re.sub(
        r'(\d{2}:\d{2}:\d{2})|(\w+H\b)|(\w+@\b)|(\d+\b)',
        replace_logic,
        content
    )
    # 写入处理后的内容,保留原格式
    with open(file_path, 'w', encoding='utf-8') as f:
        f.write(processed)

原有问题说明

  1. 原代码未导入os库直接调用os.listdir会直接报错
  2. 原正则逻辑只做了单数字替换,没有排除不需要处理的字符串,也没有实现@结尾字符串的处理逻辑
  3. 原文件读写逻辑错误:写操作放在遍历文件的循环外部,仅会处理最后一个文件;且变量名混乱,文件对象和文本内容变量同名导致覆盖,最终写入内容异常,丢失换行
  4. 手动拼接路径容易出现斜杠错误,用os.path.join更稳妥

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:27:04