5.6 案例:计算文件中关键字出现次数
本节将使用Python读取一个文件,统计某个特定字符串出现的次数并将其保存在某个文件中。本次我们使用collections模块,若是程序报出没有找到该模块的错误,请使用pip自行安装。
collections模块是在Python内置数据类型之上,提供了多个有用的集合类模块。由于要统计特定字符串的出现次数,我们选用模块中的Counter。关于程序具体的实现参考程序5.4。
程序5.4:
输出:
输出到文件内容(部分):
分析:
程序5.4充分体现了Python的开发速度快、代码量少的特点,由于Counter的使用,我们只需要提供数据。程序的第4行str = file.read().split(' ')将其分解介绍,file.read()在前文中讲过,它是将文件中内容以一个字符串读出,此时语句相当于string.split(' '),而对于split(' ')它是作用在一个字符串上的用于将字符串按指定规则(即它的参数,本次程序中指定为空格)分割,并将分割后内容以一个列表返回。
至此,str中为['I', 'would', 'like', 'to', 'thank', 'everyone', 'at', 'No', 'Starch', 'Press', 'for'…'favorite', 'books.\n']。接下来这条语句可以说很精彩了,collections.Counter(str)会返回一个字典,我们使用变量n接收。其中键为str中的内容,值为每项出现的次数,具体内容为{'to': 11, 'and': 10, 'the': 9, 'I': 4, 'thank': 6, 'for': 6, 'would': 5, 'like': 5, 'book': 4, 'my': 4, 'everyone': 3, 'this': 3…'books.\n': 1},关键字及其出现的次数已经统计完成,有没有感受到Python的强大!得到字典n之后,我们使用n['the']取出文中'the'出现的次数。
完成这些处理之后我们将字典n中的键和键值单独抽出,使用zip(n.values(), n.keys())将这些数据压缩成列表变量s。
完成数据采集后开始为数据写入文件做准备。在打开文件后,我们使用sorted(s, reverse=True),以数据中的n.values()值为标准对数据进行一个倒序的排列操作,最后使用“字符加空格再加字符出现的次数”这种格式将数据写入文件。
到这里程序已经结束了,你可能会有疑问,明明只要将数据写入文件就好了,为什么要先排序,再按照固定格式写入文件?这样处理会为后续操作带来极大的便利。我们先不讨论这个问题,但是在这里要说的是任何努力都不会白费的。