Python实现word_count
Github链接: https://github.com/dududu7/wc_project
1. PSP2.1表格
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
Planning |
计划 |
10 | 20 |
· Estimate |
· 估计这个任务需要多少时间 |
10 | 15 |
Development |
开发 |
300 | 550 |
· Analysis |
· 需求分析 (包括学习新技术) |
200 | 300 |
· Design Spec |
· 生成设计文档 |
10 | 20 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
0 | 0 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
10 | 10 |
· Design |
· 具体设计 |
20 | 100 |
· Coding |
· 具体编码 |
300 | 200 |
· Code Review |
· 代码复审 |
10 | 10 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
60 | 180 |
Reporting |
报告 |
30 | 30 |
· Test Report |
· 测试报告 |
30 | 10 |
· Size Measurement |
· 计算工作量 |
10 | 10 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
10 | 30 |
合计 |
1100 | 1485 |
项目相关要求
- 基本功能
-c file.c 返回文件file.c的字符数 (实现)
-w file.c 返回文件file.c的词的数目(实现)
-l file.c 返回文件file.c的行数(实现) - 扩展功能
-s 递归处理目录下符合条件的文件(实现)
-a 返回更复杂的数据(代码行 / 空行 / 注释行)(实现) -
高级功能
-x 程序会显示图形界面,用户可以通过界面选取单个文件,程序就会显示文件的字符数、行数等全部统计信息。(未实现)解题思路
- 首先把大问题拆分成几个函数功能去实现:读取文件read();数基本功能的数目count_cl();数扩展功能的行数count_w();输出print1();递归文件duigui()这几大块;后来因为具体实现与一开始计划有出入,又增加了函数find(),而且基本功能和扩展的函数也有了变化。
这个题目有几个地方我实现了很久,首先是基础功能的返回word,对于怎样区分出单词有些困惑。因为主体是区分.py的代码-a的时候,也是考虑‘’‘ ’‘’和#为主的注释行,递归的是子文件的内容,搞清楚目的操作并没有太复杂。 Py相比于C和JAVA更面向对象,而且最近对Python感兴趣想要挑战一下自己,所以选择了开发效率较高的python。由于以前从来没有开发过使用命令行参数启动的程序,最后还是用input的方法进行输入。
设计实现过程和代码说明
首先实现基础功能,读取文件:
#比起Re = open(dict1[numble])之后close文件要好,逐行读取
逐行读取的好处:-a 容易实现,readline后很容易计算空行,代码行
调用find函数,返回所有出现‘’’ ‘’’ 的行数,以便之后计算注释行数量
输出函数print1(),和read函数
为了实现递归读取,需要解决以下几个问题:
1.![](https://img2018.cnblogs.com/blog/1485333/201809/1485333-20180914191400948-70229705.png)
为了处理读取path中\转义报错的问题,一开始采取前面加r的方式,但是路径不能input:
![](https://img2018.cnblogs.com/blog/1485333/201809/1485333-20180914172040330-710794803.png)
查找解决方法时看到:转义只发生在代码字面量转换为python内部对象的过程中。已经是字符串了,则不会再次转义。
所以只要在转义之后再改回来就好:
2.递归的时候只会加文件不会加'\',要记得加上‘\’符号
3.路径错误->报错
main函数:
转py为exe文件,可以先下一个pyInstall,百度过程就好
这样就算转换成功了。
测试:
·文件测试:
1.空文件
3.1个字符
这里回车也算作了1个字符
3.1个单词
4.完整代码
单独打印word:
·递归测试:
项目总结:
完成这个项目耗时挺久,现在能完全理解那句写功能只要20%的时间,接下来都在改bug了。虽然在暑假学习过Python,但是不够系统,导致我写代码的时候要不停的搜索,查找资料,之前的IDLE让我常常有缩进的错误,换成Pycharm才更顺手。有的时候卡bug卡半天不能解决,有的时候学习正则表达式等等用时良久,不过最终还是在星期五测试成功了。但是由于一直东拼西凑,还有很多可以改进的地方,比如输入可以更精简而不是多加一个-h解决输入全部的问题,比如读取文件read最好一次就行了,或者是功能写的更清晰一些。写代码的时候不自觉的带了好多目录,之前写C的时候习惯这样了,不知道算不算画蛇添足。这次累计的经验我会好好从中学习,争取下一次做的更好。