题目:

统计一个文件中每个单词出现的次数,列出出现频率最多的5个单词。

前言:

这道题在实际应用场景中使用比较广泛,比如统计历年来四六级考试中出现的高频词汇,记得李笑来就利用他的编程技能出版过一本背单词的畅销书,就是根据词频来记单词,深受学生喜欢。这就是一个把编程技能用来解决实际问题的典型场景。另外,在数据分析时,那些词云效果本质上都是基于词频统计来调整字体的大小,如果你能熟练运用Python中的知识来解决问题的话,说明你真的入门Python了。

分析

本题主要考察以下几个方面的知识点:

1、如何正确读写文件

在python中读写文件可以使用内置函数open(),而 open 函数在python2 和 python3 中有一定的区别,比如 Python 中可以指定读写文件的编码格式,而 Python 则不可以,为了同时兼容2和3,我们通常会使用io模块下面的 open 函数,大家可以查文档搞清楚它们之间的区别,培养主动学习能力和查资料的习惯。

另外一点是读写文件完成之后是需要关闭文件描述符的,除了可以使用 try...except...finally的语法之后,我们还可以使用更优雅的 with … as 的语法来自动关闭文件。

2、如何对数据进行排序

sorted函数是一个使用频率很高的内置函数,它的用法也很强大,因为它可以通过指定参数 key 来进行自定义排序,也就意味着你不仅可以对数字排序、对字母排序、还可以对列表、字典、自定义的对象进行排序,你只需要要告诉 sorted 函数的排序规则是什么,比如一个people对象,我既可以根据年龄排序也可以根据身高体重来排序,所以这个函数时非常灵活的,另外,对于列表对象有自带的 sort 方法,如果能区分清楚 list.sort 与 sorted 之间区别那说明你已经能灵活运用了。

3、字典数据类型的运用

做词频统计,用字典无疑是最合适的数据类型,单词作为字典的key, 单词出现的次数作为字典的 value,很方便地就记录好了每个单词的频率,字典很像我们的电话本,每个名字关联一个电话号码。另外,字典最大的特点就是它的查询速度会非常快。理想情况下时间复杂度为O(1),我是说理想情况,如果你想深入了解字典的话,建议看看这篇文章 https://www.laurentluce.com/posts/python-dictionary-implementation/

4、正则表达式的运用

对文本、字符串处理,正则表达式简直是神器,无论是做数据爬虫还是数据清洗使用非常广泛,当然,正则表达式并不是Python特有的东西,所有编程语言都支持,我们要做的除了学习正则表达式还有他的API,只有熟悉了API我们才能运用到实际场景中去。关于正则表达式推荐一篇文章:http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html ,另外我还发现有同学引入了jieba分词库,这个库在做中文分词非常有用,感兴趣的可以去了解一下。

实现

分析完之后,我们实现起来其实是非常快的。所以我们在拿到一个需求的时候,首先肯定是把需求弄清楚,想想大概可以用哪些技术来实现,随后才是动手写代码,其实我们在工作上,真正写代码的时间还不到一半。

# -*- coding:utf-8 -*-

import io

import re

class Counter:

def __init__(self, path):

"""

:param path: 文件路径

"""

self.mapping = dict()

with io.open(path, encoding="utf-8") as f:

data = f.read()

words = [s.lower() for s in re.findall("\w+", data)]

for word in words:

self.mapping[word] = self.mapping.get(word, 0) + 1

def most_common(self, n):

assert n > 0, "n should be large than 0"

return sorted(self.mapping.items(), key=lambda item: item[1], reverse=True)[:n]

if __name__ == '__main__':

most_common_5 = Counter("importthis.txt").most_common(5)

for item in most_common_5:

print(item)

打印结果:

('is', 10)

('better', 8)

('than', 8)

('the', 6)

('to', 5)

总结

我在看大家代码的时候,很多代码依然存在有命名不规范(建议读PEP8),代码的排版混乱(阅读起来很困难,建议用Pycharm进行格式化)。还有不少代码的实现方式看起来很复杂(往往越复杂的代码Bug越多)。当然,实现方法不是唯一。

比如Python模块本身就提供了一个collections.Counter的类,它继承自dict类,就是用于做统计的,我发现有部分同学使用的就是这个类来实现的,细心的你可能发现了,我实现的这个Counter和collections下面那个Counter很像,其实这就是造轮子,造轮子可以锻炼我们的编程思维,当然在工作上有现成的东西就没必要自己造轮子了,除非你有信心做得更好。你也可以思考思考,假如Python没有提供Counter这个工具,你该怎么做。

另外,该模块还提供一个有序的字典对象 OrderedDict,使用它可以免去我们手动排序的操作。最后建议大家学习总结上面我提到的所有内容。如果你能坚持100天,相信你对Python的掌握程度是游刃有余的。

以上所述是小编给大家介绍的Python统计单词出现的次数,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

python统计文件中每个单词出现的次数_Python统计单词出现的次数相关推荐

  1. python从文件中读取数据时出现错误_Python 从文件中读取数据

    读取整个文件 # 案例:读取整个文件 # pi_digits.txt 3.1415926535 8979323846 2643383279 # file_reader.py with open ('p ...

  2. python统计有几个单词_统计文件中单词的个数---Shell及python版

    最近在看shell中有个题目为统计单词的个数,使用了awk功能,代码如下 #!/bin/bash if [ $# -ne ];then echo "Usage:basename $0 fil ...

  3. Python学习:统计文件中每个单词的个数

    统计文件中的各个单词的个数 通过python程序将文件中的单词数量统计出来 心得: 文件中的内容 通过python程序将文件中的单词数量统计出来 代码: # -*- coding: utf-8 -*- ...

  4. python统计出现次数最多的词语_python编程:统计文件中出现次数最多的前10个词,并按出现次数排列它们...

    python编程:统计文件中出现次数最多的前10个词,并按出现次数排列它们. 下面我编写的这个程序可以用作:统计文件中所有的字符数.行数.出现次数最多的单词. # -*- coding:utf-8 - ...

  5. Python:统计文件中所有英文单词的数量

    #!/usr/bin/env python # coding:UTF-8""" @version: python3.x @author:曹新健 @contact: 617 ...

  6. Mapreduce程序 统计文件中每个单词出现次数

    mapreduce程序 统计文件中每个单词出现次数 调用MapReduce对文件中各个单词出现次数进行统计 一.安装环境 二.准备工作 1.创建Hadoop账户 2.更新 apt 3.安装vim 4. ...

  7. python如何读取文件内容求和_使用python对文件中的数值进行累加的实例

    问题描述: 一个文件由若干条记录组成,记录的格式为:"num1 num2",有时候,需要统计文件中num1对应的num2的总值. 处理问题的思路 用传说中的python来处理,很方 ...

  8. linux字符串排序文件,Linux awk+uniq+sort 统计文件中某字符串出现次数并排序

    https://blog.csdn.net/qq_28766327/article/details/78069989 在服务器开发中,我们经常会写入大量的日志文件.有时候我们需要对这些日志文件进行统计 ...

  9. python怎么读文件里的指定几行-Python从文件中读取指定的行以及在文件指定位置写入...

    Python从文件中读取指定的行 如果想根据给出的行号, 从文本文件中读取一行数据, Python标准库linecache模块非常适合这个任务: 测试文件内容 :This is line 1. Thi ...

  10. python文件读取输出-Python 读写文件中数据

    1 需求 在文件 h264.txt 中的数据如图1,读入该文件中的数据,然后将第1列的地址删除,然后将数据输出到h264_out.txt中: 图1 h264.txt 数据截图 图2 输出文件 h264 ...

最新文章

  1. 2022-2028年中国游泳健身行业市场研究及前瞻分析报告
  2. 妹纸这套路玩的好深,吹泡泡能吹出气球来
  3. stm32中使用#pragma pack(非常有用的字节对齐用法说明)
  4. 爬取某一微博用户所有文本文件或者是视频图片文件
  5. VTK:图片之ImageShrink3D
  6. Windows Server 2008 R2Cisco2960 配置Radius服务 实现802.1x认证 实战
  7. MemCache在tomcat中的负载均衡和session交叉存放
  8. mvc4.0 @Styles.Render(转)
  9. Numpy高级操作大全!!!
  10. uniapp实现瀑布流基本写法
  11. CentOS7安装dnf报错:No package dnf available
  12. 广州蓝景分享—「web前端素材」使用CSS动画效果(上)
  13. 笔记-51,k60,stm32
  14. 台式电脑怎么组装步骤_怎么组装台式电脑 台式电脑组装方法
  15. 白盒测试和黑盒测试的区别
  16. 刘强东的敌与友:嘲讽王健林一亿小目标,性侵案后李国庆说该原谅
  17. raid5硬盘插到计算机读取,【哭着写下这篇文章】win2008软raid5变成2个磁盘组的数据恢复...
  18. 基恩士KV7500,KV8000轴控制FB模板,直接可以拿来用,使基恩士编程也随心所欲
  19. python conda安装
  20. 【matlab应用】:生成老电影海报

热门文章

  1. IP地址更改小工具(bat命令)
  2. JzxxOJ Problem 4209: 寻找雷劈数 题解
  3. Altium Designer 入门笔记(4)层次原理图的设计
  4. Windows 下安装 Xdebug 受难记之(1)
  5. @Primary 和 @Qualifier
  6. logits and labels must be broadcastable: logits_size=[131072,9] labels_size=[131072,8]的错误
  7. MySQL概述以及下载安装
  8. Linux中的libc和glibc
  9. 处理R安装后出现You're using a non-UTF8 locale, therefore only ASCII characters will work.的情况
  10. 用vue-pdf包实现pdf文件预览,支持分页