此作业的要求参见[https://edu.cnblogs.com/campus/nenu/2019fall/homework/6583]
该作业采用的编程语言为Python,其代码的地址为[https://e.coding.net/sxl357/sxl.githttps://e.coding.net/sxl357/sxl.git]https://e.coding.net/sxl357/sxl.githttps://e.coding.net/sxl357/sxl.git
功能1 小文件输入
功能2 支持命令行输入英文作品的文件名
功能3 支持命令行输入存储有英文作品文件的目录名
功能4 从控制台读入英文单篇作品
1.功能1
重难点:
(1)如何输入命令行参数?
引入sys模块,使用sys.argv[]实现命令行参数的读取。
(2)如何打开文件?
引入os模块,利用open()函数打开文件,并返回文件对象,open()函数的基本形式为:open(file,mode),file为文件路径,mode为操作模式。
因为文件路径必须要有后缀.txt,所以先检查传入的文件路径有没有.txt,如果没有就加上。
因为py文件默认ASCII编码,中文在显示时会做一个ASCII到系统默认编码的转换,这时会报错,所以在open()函数里加‘encoding='utf-8’,意为以字节为单位对Unicode进行编码保存,这样遇到中文也不会出错。
(3)如何将文件中的所有单词整理在一个列表?
利用re模块的findall()函数,findall(pattern, string
)以列表的形式返回string中能与pattern匹配的子串,r'[a-z0-9^-]+',其中r是标识,[a-z0-9^-]+是正则表达式,表示一直匹配由小写字母、数字和非连字符‘-’组成的字符串,用read()函数读取文本内容,因为前面匹配时只提了小写字母,所以在用lower()函数将文本中所有的大写字母转为小写字母。
(4)如何统计各个单词出现的次数?
collections模块的Counter()函数用来跟踪值出现的次数,以字典的键值对形式存储,其中元素为key,其计数为value,返回一个字典
(5)如何统计总的单词个数(不重复)?
遍历Counter()函数生成的字典,设num初始值为1,每遍历一个键值对,num值加1
重要代码:
from collections import Counter import sys from re import findall def statistic(name): # 判断传入的命令行参数是否含有.txt,如果没有,要加上,再作为打开路径 d='.txt' if d in name: path=name else: path=name+d f=open(path,'r',encoding='utf-8') lists=findall(r'[a-z0-9^-]+',f.read().lower()) words=Counter(lists) #遍历字典,统计键值对数 num=0 for key,value in words.items(): num+=1
转载自原文链接, 如需删除请联系管理员。
原文链接:宋晓丽20190912-3 词频统计,转载请注明来源!