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
相关产品推荐
相关产品推荐

