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

Python处理大文本文件删除标点时报AttributeError错误求助

问题根因
  • 你在代码中调用line.split()后,原本的字符串类型变量line会被转为由单个单词组成的列表类型,translate()是Python字符串专属方法,列表类型不支持该方法,因此触发AttributeError
  • 该报错和编辑器绑定的Python版本无关,不需要升级Python版本
修复方案

调整字符串处理顺序,先完成大小写转换、标点删除操作之后,再执行拆分单词的操作即可,修复后的完整代码如下,已经补充了你需要的单词计数、停用词过滤功能:

import string

# 可自定义停用词列表,过滤不需要统计的常用词
STOP_WORDS = {'the', 'and', 'of', 'a', 'to', 'in', 'is', 'it', 'you', 'that', 'he', 'she', 'this', 'i', 'my', 'me'}

fname = input("Enter file name: ")
counts = dict()

# 使用with上下文管理器打开文件,读取结束后会自动关闭文件,避免资源泄漏
with open(fname, 'r', encoding='utf-8') as fh:
    for line in fh:
        # 先处理字符串类型的行内容
        line = line.strip()
        line = line.lower()
        # 删除所有标点符号
        line = line.translate(str.maketrans("", "", string.punctuation))
        # 处理完成后再拆分为单词列表
        words = line.split()
        for word in words:
            # 过滤空字符串和停用词
            if word and word not in STOP_WORDS:
                counts[word] = counts.get(word, 0) + 1

# 输出出现频率最高的20个单词
print("词频最高的20个单词:")
for word, count in sorted(counts.items(), key=lambda x: x[1], reverse=True)[:20]:
    print(f"{word}: {count}")
关键调整说明
  • 调换了标点删除和单词拆分的执行顺序,确保调用translate()方法的变量是字符串类型
  • 新增了encoding='utf-8'参数避免读取中文或特殊编码文件时出现乱码
  • 补充了停用词过滤逻辑,你可以根据需求增减STOP_WORDS里的内容
  • 大文件读取场景下用with语法管理文件句柄,不会出现文件无法关闭的资源泄漏问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:06:03