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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 03:11:50