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

使用正则表达式去除标点失效,求Python脚本修复指导

修复你的标点移除脚本

我看了你的代码,发现几个关键问题导致标点没被移除,而且全程没报错——因为你的代码其实根本没真正执行标点移除的逻辑,也没把处理后的内容落地到文件里。咱们一步步来把它修好:

问题拆解

  • 缩进逻辑错误:你打开文件的代码f = open(filename, 'r')在for循环里,但后续的函数定义和处理逻辑全在循环外面,等于循环只遍历了文件列表,却没对每个文件做实际处理。
  • 未读取文件内容:打开文件后,你没有读取文件里的行内容,remove_punctuation函数根本没拿到要处理的文本素材。
  • 函数内部变量笔误:代码里re.sub(r'[^\w\s]', '', li...这里明显是截断了,应该是line而不是半吊子的li...。
  • 未写入处理结果:就算处理了内容,你也没把处理后的文本写回文件,原文件自然毫无变化。
  • 文件操作不规范:直接用open却没手动关闭文件,容易导致资源泄漏,最好用with语句自动管理文件生命周期。

修复后的完整代码

import os
import re

directory = 'C:\\Users\\User\\Desktop\\test1'
os.chdir(directory)

def remove_punctuation(lines):
    new_lines = []
    for line in lines:
        # 修复变量名,完成正则替换逻辑
        new_line = re.sub(r'[^\w\s]', '', line)
        new_lines.append(new_line)
    return new_lines

for filename in os.listdir(directory):
    if filename.endswith(".txt"):
        # 用with语句自动关闭文件,同时指定编码避免中文乱码
        with open(filename, 'r', encoding='utf-8') as f:
            lines = f.readlines()
        # 调用函数处理文本
        processed_lines = remove_punctuation(lines)
        # 写回文件(如果想保留原文件,可以改成新文件名,比如filename.replace('.txt', '_no_punct.txt'))
        with open(filename, 'w', encoding='utf-8') as f:
            f.writelines(processed_lines)

额外优化建议

  • 如果你的文件包含中文,一定要指定encoding='utf-8',避免出现乱码问题。
  • 正则r'[^\w\s]'会移除所有非单词、非空白的字符,如果你需要保留某些特定标点(比如中文的句号、感叹号),可以修改正则表达式,比如r'[^\w\s\u4e00-\u9fa5。!?,]'就能保留常用中文标点。
  • 要是不想覆盖原文件,把写文件的文件名改成新的格式就行,比如f"{os.path.splitext(filename)[0]}_cleaned.txt"。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:34:09