20180918-1 词频统计

作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2126

作业代码地址:https://git.coding.net/onion102983/cipintongji.git 代码为wf.py文件用python语言编码

一.功能一的重点难点

1.如何打开文件

用f = open(path, encoding='utf-8')接收文件路径并传入

2.读取文本内容,把大写字母转化为小写避免因单词首字母大小写不同区分成不同的单词

 利用read()读取文本内容,lower()把所有大写单词转化为小写单词

3.如何区分单词

通过正则表达式用re.findall()生成列表

4.统计个单词并计数

用collections.Counter对象统计单词的计数并用most_common(n)方法返回计数值最大的n个元素的元组列表

5.控制台输入

利用Pyinstaller和Pywin32执行命令Pyinstaller.py -f wf.py将Python脚本(.py)转换为可执行文件(.exe)

二.功能一代码片段

 1     f = open(path, encoding='utf-8')
 2     words = re.findall(r'w+', f.read().lower())
 3     collect = collections.Counter(words)
 4     num = 0
 5     for i in collect:
 6         num += 1
 7     print('total %d words
' % num)
 8     result = collect.most_common(10)
 9     for j in result:
10         print('%-8s%5d' % (j[0], j[1]))

三.功能一执行效果截图

四.功能二的重点难点

1.如何区分-s -test.txt和不带-s .txt的参数

利用参数sys.argv[1] 是否等于 '-s'来判断执行功能一还是功能二

2.传入参数后如何为打开文件open()内生成有效的路径参数

如果命令行参数带有'-s'的传入sys.argv[2] 作为open的路径参数不带的则传入sys.argv[1] 并且拼入字符串'.txt'作为参数

五.功能二代码片段

 1     if sys.argv[1] == '-s':
 2         doCount(sys.argv[2])
 3     else:
 4         doCount(sys.argv[1])
 5 
 6 
 7     s = '.txt'
 8     if s in accept:
 9         path = accept
10     else:
11         path = accept + '.txt'

六.功能二执行效果截图

七.功能三的重点难点

1.如何判断是否为文件夹,如果是则遍历文件

用os.path.isdir()判断是否为文件夹利用for循环遍历里面文件

2.如何判断是否为文件如果是则执行词频统计并输出

用os.path.isfile()判断是否为文件在调用定义好的词频统计函数进行输出

八.功能三代码片段

1     elif os.path.isdir(sys.argv[1]):
2         fileFindAndCount(sys.argv[1])
3 
4 
5 def fileFindAndCount(path1):
6     files = os.listdir(path1)
7     for file in files:
8         if os.path.isfile(file):
9            doSomeFileCount(file)

九.功能三执行效果截图

十.功能四

从控制台读入英文单篇作品,这不是为了打脸老五,而是为了向你女朋
友炫酷,表明你能提供更适合嵌入脚本中的作品(或者如她所说,不过是更灵活
的接口)。如果读不懂需求,请教师兄师姐,或者 bing: linux 重定向,尽管
这个功能在windows下也有,搜索关键词中加入linux有利于迅速找到。

看了一些有关重定向的知识,尝试编码但功能四未能实现。

十一.psp

psp阶段表格

psp阶段 预计花费时间(min) 实际花费时间(min) 分析时间差原因
功能一实现 60 186 尝试了多种方法来区分单词统计,对控制台输入很陌生也额外花了大量的时间。
功能一测试 30 54 测试结果一直偏差很大不准确,对功能一的主要代码部分进行了多次更改。
功能二实现 60 137 功能实现后在做功能三时发现当时做的参数判断并不能实现功能三,所以进行了重做。
功能二测试 30 47 因为重做了一次功能二所以也多做一遍功能二的测试。
功能三实现 60 92 对于文件系统不够熟悉所以额外花费了很多时间去了解对于文件操作的代码。
功能三测试 30 55 第一次把python文件打包成.exe文件,学习的过程超出了预估时间。
原文地址:https://www.cnblogs.com/nenusoft/p/9696784.html