文章目录

  • 要求
  • 一、打开文件
    • 正则表达式
    • spilt()函数
      • 实例
  • 二、词频统计
  • 三、单词排序
  • 四、输出或写入文件
    • python文件写入

要求

对HarryPotter5.txt英文小说进行词频统计,统计出前二十个频率最高的单词,并打印输出或写入文件


一、打开文件

打开文件并将单词中非单词字符用空格代替
代码:

#读取小说内容
fp = open('HarryPotter5.txt')
content = fp.read()
#所有标点符号 用空格代替
#匹配非单词字符的字符
content = re.sub('\W',' ',content)
# Python split() 通过指定分隔符对字符串进行切片
words = content.split() # 以空格为分隔符,包含 \n

正则表达式

正则re

\W
__匹配非单词字符的字符。_这与 \w 正相反。如果使用了 ASCII 旗标,这就等价于 [^a-zA-Z0-9]。如果使用了 LOCALE 旗标,则会匹配当前区域中既非字母数字也非下划线的字符。

spilt()函数

Python split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串
str.split(str="", num=string.count(str)).
   str – 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
   num – 分割次数。默认为 -1, 即分隔所有

实例

str = "Line1-abcdef \nLine2-abc \nLine4-abcd";
print str.split( );       # 以空格为分隔符,包含 \n
print str.split(' ', 1 ); # 以空格为分隔符,分隔成两个

以上实例输出结果如下:

[‘Line1-abcdef’, ‘Line2-abc’, ‘Line4-abcd’]
[‘Line1-abcdef’, ‘\nLine2-abc \nLine4-abcd’]

以下实例以 # 号为分隔符,指定第二个参数为 1,返回两个参数列表。

txt = "Google#Runoob#Taobao#Facebook"
# 第二个参数为 1,返回两个参数列表
x = txt.split("#", 1)
print x

以上实例输出结果如下:

[‘Google’, ‘Runoob#Taobao#Facebook’]


二、词频统计

代码如下(示例):

#对所有的单词出现次数进行统计
#key-->count  数据结构:Dict字典
wordCounter = {}
for word in words:if word in wordCounter:wordCounter[word] += 1else:wordCounter[word] = 1
#print(wordCounter)

#这样打印输出是乱序 需要进行排序 sorted


三、单词排序

代码如下(示例):

#默认按照增序  使用reverse参数改变顺序
sortedWordCounter = sorted(wordCounter.items(),key=lambda item: item[1],reverse=True)
#print(sortedWordCounter) #这是打印排序完毕的词频

Dict字典底层是哈希结构 哈希结构不支持排序
wordCounter.items()装换成-----列表
这个列表中每一个元素是一个元组
元组里有两个元素 第一个元素是键 第二个元素是值

效果如下:

解释 lambda item: item[1]:
相当于定义一个函数 lambda 相当于匿名函数
效果如下
lambda item: item[1] :前是参数 :后是返回值

def func(item):return item[1]

匿名函数和正常函数效果一样只不过是没有名字而已


四、输出或写入文件

代码如下(示例):

#方法一
print(sortedWordCounter[:20])
#方法二
for item in sortedWordCounter[:20]:print(item)
#也可以写入文件
fp = open('countwords_result.csv','w')
for (word,count) in sortedWordCounter:line = word+','+str(count)+'\n'fp.write(line)


python文件写入

写入已有文件
如需写入已有的文件,必须向 open() 函数添加参数:
   “a” - 追加 - 会追加到文件的末尾
   “w” - 写入 - 会覆盖任何已有的内容
注释:“w” 方法会覆盖全部内容。

#打开文件 "demofile2.txt" 并将内容追加到文件中:f = open("demofile2.txt", "a")
f.write("Now the file has more content!")
f.close()# 追加后,打开并读取该文件:
f = open("demofile2.txt", "r")
print(f.read())
#打开文件 "demofile3.txt" 并覆盖内容:f = open("demofile3.txt", "w")
f.write("Woops! I have deleted the content!")
f.close()# 写入后,打开并读取该文件:
f = open("demofile3.txt", "r")
print(f.read())

如需在 Python 中创建新文件,请使用 open() 方法,并使用以下参数之一:
   “x” - 创建 - 将创建一个文件,如果文件存在则返回错误
   “a” - 追加 - 如果指定的文件不存在,将创建一个文件
   “w” - 写入 - 如果指定的文件不存在,将创建一个文件

#创建名为 "myfile.txt" 的文件:
f = open("myfile.txt", "x")
#结果:已创建新的空文件!#如果不存在,则创建新文件:
f = open("myfile.txt", "w")

Python实现对哈利波特小说单词统计相关推荐

  1. iOS 小说字数统计

    小说单词统计规则(泰语除外) iOS 小说单词统计规则算法 import Foundationfinal class WordCounter {static let shared = WordCoun ...

  2. python单词统计、给定一个段落()_自己动手Python写一个词频统计小项目

    这里用python做一个小小的英文词频的统计.当然了,自己写的,就没有停词.计算词语权重这些功能了,纯粹是写写代码练练手. 首先呢,这里是一篇英文文章,就像下面这样的185个小段落,数据量还是不大的, ...

  3. python文本统计单词_Python实现文本单词统计

    在以前的文章中,我提到过Python标准库中的collections模块中的Counter类.它的作用非常大,这里我们要用利它来实现单词统计.对于任意一篇全英文的文本文件,我们要列出其中每一个单词各自 ...

  4. python数学基础——单词统计

    这个练习使用的是英文的单词统计,使用split通过单词中间的空格来做区分,在遍历的过程中通过对[字典]类型进行[字典推导式]的处理来计算每个单词出现的频次.但是由于过程中我们通过re的正则表达式来替换 ...

  5. python数据工程师养成(1)--小说字频统计

    小说字频统计 简介 数据源 目标 步骤 总结 参考书目 简介 最近看到了一本好书,名字叫<Python全栈数据工程师养成攻略>,随便翻翻感觉对个人学习颇有裨益,故打算跟着书上的实例学完它. ...

  6. python文件读取操作练习题(统计单词)

    python文件读取操作练习题(统计单词) 学习路线:python的文件读取基础入门(read(),readlines(),with.open()) ->python文件读取操作练习题(统计单词 ...

  7. 单词统计,并按顺序打印 python

    7-7 单词统计,并按顺序打印 (10 分) 输入一些英文单词,统计每个单词出现的次数(大小写,如'At'和'at'算不同的单词),并按次数从多到少打印结果,如果次数一样就按单词的字典顺序打印(大写先 ...

  8. python中读取txt文件、统计其中所有字母出现的频度_Python编程小技巧:如何统计序列中元素的出现频度...

    原标题:Python编程小技巧:如何统计序列中元素的出现频度 实际案例 某随机序列中,找到出现次数最高的三个元素,他们的出现次数是多少? 对某英文文章的单词进行词频统计,找到出现次数最高的10个单词, ...

  9. 大数据阶段划分及案例单词统计

    大数据阶段的重要课程划分 离线分析 : hadoop生态圈 HDFS, MapReduce(概念偏多), hive(底层是MapReduce), 离线业务分析80%都是使用hive实时分析 : spa ...

最新文章

  1. LIGA Stereo:基于双目3D检测的Lidar几何感知表示学习(ICCV2021)
  2. Maximum Product Subarray
  3. 让Keras更酷一些:中间变量、权重滑动和安全生成器
  4. PHP访问连接MYSQL数据库
  5. .NET 类型(Types)的那些事
  6. elementui下拉框选择图片_Element UI系列:Select下拉框实现默认选择
  7. 走在WCF学习的路上---印在脑子里的点点滴滴(两种元数据交换方式的优缺点)...
  8. 配置网络终端计算机,终端网络计算机概述.ppt
  9. 微信小说域名被封-366tool在线解答微信屏蔽小说网页停止访问的解决方案
  10. chrome打开链接隐私设置错误_解决用谷歌浏览器访问https网站遇到的“隐私设置错误 您的连接不是私密连接”问题...
  11. sparc-linux-gcc math.h 调用,无法使用叮进行交叉编译为SPARC
  12. 大数据预处理之数据集成
  13. 土库曼人纳德沙为什么选择波斯一方与奥斯曼人作战?
  14. java graphics2d 绘图_java GUI Graphics2D 绘图
  15. 记一次xxl-job执行器Online机器地址(注册节点)加倍问题
  16. App地推活动的效果差?可能是地推业绩统计效率低惹的祸
  17. Rocket Pool 、InfStones 、Lido 三种质押服务浅析
  18. RTTHREAD软件包目录
  19. MyBatis警告信息 All illegal access operations will be denied in a future release
  20. linux录屏和截图软件

热门文章

  1. 一线PPT制作理论——简洁电磁环境构建
  2. 前端学习CSS篇(三)
  3. 不可错过的250款独立游戏(珍藏版)
  4. DI接口测试工装研究
  5. [书目20141024]王正良硬笔书法教学
  6. 中国传媒大学计算机与网络安全,黄玮 - 中国传媒大学 - 计算机与网络空间安全学院...
  7. 互联网真的寒冬了么?——1024,祝程序员节日快乐。
  8. 搜索条(在表格中)实现搜索功能
  9. C++のeasyx3:函数clearcliprgn、cleardevice、closegraph、getaspectratio、graphdefaults的运用
  10. python 数据分析 14天_python数据分析简介