Python基础实战:读取文件并提取出现频率最高的10个单词

拾光
拾光
发布时间:2026-10-12 | 2人浏览过
原创

本文通过Python基础实战案例,详细演示了如何安全读取本地文本文件,并使用字典(dict)进行高效的词频统计。借助内置的sorted()函数与列表切片技术,将复杂的键值对数据进行排序,最终精准提取出文件内出现次数最多的前10个单词。非常适合初学者熟悉Python的数据结构与文件流处理。

任务目标与环境准备

在处理文本数据时,统计词频(Counting Frequency)是自然语言处理中最基础的步骤之一。本案例的目标是使用 Python 编写脚本,让用户输入一个本地文件的路径,程序自动读取该文件的所有内容,按照空格划分单词,最后统计并输出出现频率最高的前 10 个单词及其次数。

在开始编码前,请准备好基础的命令行环境:

  • 运行脚本:在终端中输入 python3 your_script.py 来执行你的代码。
  • 交互模式:输入 python3 直接进入交互式命令行,输入 exit() 退出。

核心语法回顾

本次实战涉及到以下几个核心的 Python 数据结构与方法,建议在实际运行前先浏览一遍:

  • 字典 (dict) 与获取值:dict() 用于创建对象。在取值时,若担心键不存在导致报错,推荐使用 my_dict.get('key', 0),这表示如果 key 存在则返回对应值,否则返回默认值 0。
  • 元组 (tuple) 与列表 (list):元组类似于不可修改的列表,使用括号 (1, 2) 表示。在涉及数据配对(如次数和单词)时非常有用。
  • 排序 sorted():该方法可以对任意可迭代对象进行排序。对于包含多个元素的元组,默认按第一个元素的大小进行比较;若要将结果倒序排列,需传入参数 reverse=True。
  • 文件读取 open():使用 open(filepath) 打开文件后会得到一个文件句柄(handle),可以通过 for line in handle: 的方式按行读取内容。

Python 源码实现

以下是完整的实现代码。为了便于学习,我们将逻辑分为三个主要部分:文件读取、词频统计、以及排序输出。

# ==============================================
# 功能:获取任意文本文件里出现次数前 10 的单词
# 用法:python3 find_top_words.py 
# ==============================================
import sys

# 1. 获取用户输入的文件路径
filename = input('请输入要统计的文件路径:')

# 2. 安全打开文件,防止因路径错误导致程序崩溃
try:
    handle = open(filename)
except FileNotFoundError:
    print(f'无法找到文件: {filename}')
    sys.exit()

# 3. 初始化字典用于存放词频 { 'word': count }
count_dict = dict()

# 4. 逐行读取并统计词频
for line in handle:
    # 使用默认的 split(),按空白字符(空格、制表符等)将句子切分为单词列表
    words = line.split()
    
    for word in words:
        # 使用 .get 方法安全地累加次数
        # 等价于: count_dict[word] = count_dict.get(word, 0) + 1
        count_dict[word] = count_dict.get(word, 0) + 1

handle.close()  # 记得关闭文件

# 5. 利用 sorted() 对字典内容进行排序
# .items() 会返回键值对的元组 [(word1, count1), (word2, count2)...]
# 列表推导式 [(count, word) for (word, count) in count_dict.items()] 将其翻转成 [(count1, word1)...]
sorted_list = sorted(
    [(count, word) for (word, count) in count_dict.items()],
    reverse=True  # 降序排列,让次数最多的排在前面
)

# 6. 取出前 10 名,并将其还原为 { word: count } 的字典格式
top_10_list = sorted_list[0:10]
final_result = dict()
for count, word in top_10_list:
    final_result[word] = count

# 7. 打印最终结果
print('\n出现次数最多的 Top 10 单词如下:')
for word, cnt in final_result.items():
    print(f'{word}: {cnt} 次')

操作步骤深度解析

第1步:使用 try-except 安全处理文件访问

在操作文件系统时,务必考虑到路径拼写错误或文件权限导致的异常。代码中使用 try... 块包裹 open() 调用。一旦捕获到 FileNotFoundError,打印提示信息并通过 sys.exit() 终止程序的后续执行,这是一种良好的容错编程习惯。

第2步:分割文本并完成词频映射

拿到每行字符串后,直接使用 line.split() 即可得到该行所有单词构成的数组。接着遍历这个单词数组,核心技巧在于使用 count_dict.get(word, 0):如果当前单词不在字典中,它会自动返回默认值 0,并在其后 +1,从而完美实现了“没有就新建键,有就累加”的逻辑,省去了冗长的 if-else 判断。

第3步:数据转换与字典排序切片

难点解析:Python 原生并不支持直接按字典的值(Value)进行排序。我们需要将字典转换为列表结构:
1. count_dict.items() 获取键值对元组列表。
2. 通过列表推导式 [(count, word) ...] 调换位置,使代表数量的 count 位于元组的第一个位置。
3. 调用 sorted(list, reverse=True)。由于元组比较优先级从左往右,系统会以数值大小进行降序排列。

完成排序后,使用切片 [0:10] 精准截断取出排名靠前的 10 个元组,最后再反向赋值给一个新的结果字典以供美观输出。

总结

这篇关于 Python 读取文件并找出高频词的文章到这里就结束了。通过这个案例,您不仅掌握了文件的读取方式,还深入了解了字典操作及复杂排序的实战用法。希望这些内容能帮助您更好地打通 Python 数据处理的基础关卡。更多关于 Python 基础语法与应用实践的资料欢迎继续浏览本站其他相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表