为何使用open函数读取文件时仅统计最后一行的词频?
问题原因与解决方法
你的代码核心问题是遍历单词的for word in words:循环没有缩进在逐行读取文件的for line in file:循环内部。
逐行读取文件时,每循环一次都会把当前行的单词列表赋值给words变量,但因为统计单词的循环在外面,只有当所有行都读完后,才会执行一次统计——这时候words里只存着最后一行的单词,自然只能统计到最后一行的词频。
修正后的代码
# 用with语句自动管理文件,避免忘记关闭 with open('ssss.txt', 'r') as file: dict1 = {} for line in file: line = line.strip() line = line.lower() words = line.split(" ") # 把统计单词的循环缩进进来,每读一行就统计一行的单词 for word in words: # 用get方法简化计数逻辑 dict1[word] = dict1.get(word, 0) + 1 print(dict1) print("The top 10 words with maximum occurence are:") # 可补充排序取前10的逻辑 # sorted_items = sorted(dict1.items(), key=lambda kv: kv[1], reverse=True) # print(sorted_items[:10])
额外优化建议
- 使用
with语句打开文件,代码块结束后会自动关闭文件,避免资源占用问题。 - 用
dict.get(word, 0)替代手动判断键是否存在,代码更简洁。 - 如果需要处理带标点的文本,可以用
re.findall(r'\w+', line)提取单词,避免把标点当成单词的一部分。
内容的提问来源于stack exchange,提问作者aryanoberoi
相关产品推荐
相关产品推荐

