从目录多文本文件加载停用词时遇AttributeError问题求助
问题分析与解决
错误原因
- 文件对象误用:你把
with open()返回的文件对象stop_words当成列表调用append方法,但文件对象(_io.TextIOWrapper)根本没有append属性,这是直接触发报错的原因。 - 文件已关闭:循环结束后,
with语句会自动关闭文件,此时再调用stop_words.read()会触发文件已关闭的错误,而且逻辑上应该先收集所有文件内容再统一处理。
修正后的代码
import glob import os # 获取目标目录下所有txt文件路径 file_list = glob.glob(os.path.join(os.getcwd(), "Directory", "*.txt")) # 存储所有停用词文件的内容 corpus = [] for file_path in file_list: # 指定编码避免乱码问题(可根据实际文件编码调整) with open(file_path, 'r', encoding='utf-8') as f: # 读取单个文件内容,添加到corpus列表 corpus.append(f.read()) # 合并所有文件内容并转小写 all_stop_text = '\n'.join(corpus).lower() # 按换行符分割成停用词列表 stop_word_list = all_stop_text.split('\n') # 清理所有空字符串(包括文件末尾空行、中间空行) stop_word_list = [word.strip() for word in stop_word_list if word.strip()]
关键调整说明
- 把文件对象变量名改为
f,避免和停用词相关变量混淆,同时将读取的内容添加到corpus列表(这才是应该调用append的对象)。 - 统一合并所有文件内容后再处理,避免重复操作,逻辑更清晰。
- 使用列表推导式清理空字符串,比原代码的切片操作更可靠,能处理所有位置的空行和空白字符。
内容的提问来源于stack exchange,提问作者iFrankenstein
相关产品推荐
相关产品推荐

