Python 3 Jupyter中'_io.TextIOWrapper'不可下标及count_list报错求助
词频统计代码错误修复与实现
错误原因分析
文件对象无法下标访问
abc = open("ABC_Code_of_Conduct.txt", "r")返回的是文件操作对象,不是可下标访问的字符串或列表,直接用abc[item]会触发'_io.TextIOWrapper' object is not subscriptable错误,必须先读取文件内容才能处理。未定义变量
代码里的umb和count_list都没有提前声明初始化,直接使用会触发NameError。核心逻辑缺失
原代码完全没做单词拆分、频次计数的核心操作,直接构造统计列表的逻辑不成立。
修正后的完整代码
# 找出第15个最频繁出现的单词及其频次并打印 from collections import Counter import string # 读取文件并预处理文本 with open("ABC_Code_of_Conduct.txt", "r", encoding="utf-8") as f: # 读取全部内容,转为小写统一格式 text = f.read().lower() # 移除所有标点符号 text = text.translate(str.maketrans("", "", string.punctuation)) # 按空格拆分单词 words = text.split() # 统计每个单词的出现频次 word_counts = Counter(words) # 按频次从高到低排序,得到(单词, 频次)的列表 sorted_counts = sorted(word_counts.items(), key=lambda x: x[1], reverse=True) # 打印结果,先判断是否有足够的单词数量 if len(sorted_counts) >= 15: print("频次最高的单词:", sorted_counts[0]) print("第15个最频繁的单词:", sorted_counts[14]) else: print("文本中的单词总数不足15个,无法获取第15个高频词")
关键步骤说明
- 用
with语句打开文件,自动管理文件的打开和关闭,避免资源浪费。 - 文本预处理:转小写消除大小写差异,去除标点避免把带标点的单词当成不同项。
- 用
collections.Counter快速统计词频,这是Python内置的高效统计工具,省去手动循环计数的麻烦。 - 排序后通过索引访问结果,加入长度判断防止索引越界报错。
内容的提问来源于stack exchange,提问作者Aniket
相关产品推荐
相关产品推荐

