梁梦瑶 20190912-3 词频统计
此作业要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/6583
代码:[https://e.coding.net/hahaa/hahaha.git]
词频统计 SPEC 20180918
老五在寝室吹牛他熟读过《鲁滨逊漂流记》,在女生面前吹牛热爱《呼啸山庄》《简爱》和《飘》,在你面前说通读了《战争与和平》。但是,他的四级至今没过。你们几个私下商量,这几本大作的单词量怎么可能低于四级,大家听说你学习《构建之法》,一致推举你写个程序名字叫wf,统计英文作品的单词量并给出每个单词出现的次数,准备用于打脸老五。
希望实现以下效果。以下效果中数字纯属编造。
功能1 小文件输入。 为表明程序能跑,结果真实而不是迫害老五,请他亲自键
盘在控制台下输入命令。
一.功能一重难点
1.在将.py文件转换为.exe文件上花费了很多时间
具体步骤:
(1)进入Python的Scripts文件夹。然后,在cmd中输入命令:pip.exe install Pyinstaller
,接下来会完成pyinstaller的安装,安装完成后在Scripts文件夹中会出现pyinstaller.exe,说明安装成功。
(2)最后,通过命令行的方式实现Python脚本到exe的转换,命令格式为:pyinstaller.exe [-parameter] filename
2.开始的时候没有思路不知道如何下手,通过请教学长,与同学交流分析此题,然后学习python的相关知识,了解模块的用途,功能一主要了解了collections模块里的Counter类和most_common( )函数以及学习了正则表达式,这些对我而言均是难点。
Counter用来跟踪值出现的次数
most_common(n)用来实现Top n的功能,返回一个列表,列表元组提供频率前n的元素和次数
findall()方法能够以列表的形式返回能匹配的子串,w匹配从小写a到z,大写A到Z,数字0到9
def jisuanTotal(word): user_counters=Counter(word) total=0 for user_counter in user_counters: total+=1 print("total "+str(total)+" words\n") lsts=user_counters.most_common(10) #most_common()用来实现Top 10的功能,返回一个列表,列表元组提供频率前10的元素和次数 for lst in lsts: print("%s %d"%(lst[0],lst[1])) #将元素和计数显示出来 def word_list(filename): #实现功能一 with open(filename,encoding='utf-8') as f: #打开文件 content=f.read() #用方法read()读取文件的全部内容 words=re.findall(r'[\w^-]+',content) #findall()方法能够以列表的形式返回能匹配的子串,w匹配从小写a到z,大写A到Z,数字0到9 jisuanTotal(words)
二、功能二重难点
功能二在功能一的基础上进行了改进,学习了文件打开和异常处理,因为之前没有接触过相关知识,所以对我而言是难点。
异常处理:
捕捉异常可以使用try/except语句。
try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。
如果你不想在异常发生时结束你的程序,只需在try里捕获它。
def file_name(path): #功能二实现,输入不带后缀的文件名 path=path+'.txt' try: with open(path,encoding='utf-8') as f: content=f.read() except FileNotFoundError: #异常处理,找不到文件,输出文件不存在 msg="The file"+path+"does not exist." print(msg) else: words=re.findall(r'[\w^-]+',content) jisuanTotal(words)
三、功能三重难点
了解了os模块是对文件目录进行操作的模块,所以重点在于学习os模块,花费了很长时间的点在于怎样将文件名和扩展名分离,只输出文件名,最终通过百度解决了。os.path.splitext(“文件路径”)用于分离文件名与扩展名;默认返回(fname,fextension)元组。
def file_floder(path): #功能三实现输入存储有英文作品文件的目录名 dirs = os.listdir(path) for file in dirs: if os.path.isfile(file): #判断是否是文件 print(os.path.splitext(file)[0]) #os.path.splitext(“文件路径”)用于分离文件名与扩展名;默认返回(fname,fextension)元组 with open(file,encoding='utf-8') as f: words=re.findall(r'[\w^-]+',f.read()) jisuanTotal(words) print('----')
四、功能四重难点
对重定向知识相关知识进行学习研究,但依旧对此题没有思路。
五、总结
根据本次作业,真的学到了不少知识,这周的感悟就是实践是检验真理的唯一标准,学习语言也如此,如果仅仅是看课本看视频,学到的东西都比较浅显,然而在项目中实践会学的比较扎实,当遇到问题时,去学习对应的知识点,这样既能加快速度,又能记得牢固。
最后做版本控制的时候也遇到了很多困难,步骤如下:首先在coding上建立一个新的项目,其后的操作详见https://blog.csdn.net/weixin_39910711/article/details/89955544。
五、psp
功能一:因为不知道如何将.py文件打包为.exe文件花费了很长时间。
功能二和功能三均因为对python知识的不熟悉,对python学习的太少。
功能四因为没有思路,不了解重定向,最终也没有解决问题。