软件工程——Word-Counter
Python实现Word-Counter
一、前言
Github地址:https://github.com/hzquestion/Word-Counter
二、项目概述
实现一个统计程序,它能正确统计程序文件中的字符数、单词数、行数,以及还具备其他扩展功能,并能够快速地处理多个文件。
处理模式:
python Word-Counter.py [parameter] [filename]
基本功能列表(实现):
Word-Counter.py -c file.c
//返回文件 file.c 的字符数Word-Counter.py -w file.c
//返回文件 file.c 的词的数目Word-Counter.py -l file.c
//返回文件 file.c 的行数
扩展功能(未实现):
-s
递归处理目录下符合条件的文件。-a
返回更复杂的数据(代码行 / 空行 / 注释行)。
高级功能(未实现):
-x
参数。这个参数单独使用。如果命令行有这个参数,则程序会显示图形界面,用户可以通过界面选取单个文件,程序就会显示文件的字符数、行数等全部统计信息。
三、PSP
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
Planning |
计划 |
10 |
10 |
· Estimate |
· 估计这个任务需要多少时间 |
480 |
600 |
Development |
开发 |
420 |
540 |
· Analysis |
· 需求分析 (包括学习新技术) |
120 |
200 |
· Design Spec |
· 生成设计文档 |
20 |
20 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
20 |
10 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
20 |
30 |
· Design |
· 具体设计 |
90 |
100 |
· Coding |
· 具体编码 |
110 |
130 |
· Code Review |
· 代码复审 |
20 |
20 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
20 |
30 |
Reporting |
报告 |
60 |
60 |
· Test Report |
· 测试报告 |
30 |
30 |
· Size Measurement |
· 计算工作量 |
10 |
10 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
20 |
20 |
合计 |
490 |
610 |
四、解题思路描述
- 读取文件,并完成对文件的处理工作
- 对基础功能进行分析,先完成基础功能
- 测试运行,修复bug
- 优化代码,尝试完成扩展功能
五、设计实现过程
- 实现计算字符数的函数
- 实现计算单词数的函数
- 实现计算行数的函数
- 设计主函数输出结果
- 用不同的源代码文件进行测试
- 优化代码
六、代码说明
计算字符数
def Char_Count(filename): #字符数统计 charcount = 0 try: with open(filename, encoding = 'utf-8') as fi: for x in fi: match = re.findall(r'[\s]+', x) for i in match: x = x.replace(i, '') charcount += len(x) return charcount except IOError: print("Failed to open the file,please check if the path is correct.")
计算单词数
def Word_Count(filename, encoding = 'utf-8'): #单词数统计 wordcount = 0 try: with open(filename) as fi: for x in fi: match = re.findall(r'[a-zA-Z-\']+',x) wordcount += len(match) return wordcount except IOError: print("Failed to open the file,please check if the path is correct.")
计算行数
def Line_Count(filename, encoding = 'utf-8'): #行数统计 linecount = 0 try: with open(filename) as fi: for x in fi: linecount += 1 return linecount except IOError: print("Failed to open the file,please check if the path is correct.")
主函数输出
if __name__=='__main__': #主函数 print('Word-Counter starts working...') print('--------------------------------') parser = argparse.ArgumentParser(description="This is a Word-Counter.") parser.add_argument("-c", metavar = "--character", dest = "char_arg", help = "Return number of characters.") parser.add_argument("-w", metavar = "--word", dest = "word_arg", help = "Return number of words.") parser.add_argument("-l", metavar = "--line", dest = "line_arg", help = "Return number of lines.") args = parser.parse_args() if args.char_arg: charcount = Char_Count(args.char_arg) print("Number of characters:%s" % (charcount)) if args.word_arg: wordcount = Word_Count(args.word_arg) print("Number of words:%s" % (wordcount)) if args.line_arg: linecount = Line_Count(args.line_arg) print("Number of lines:%s" % (linecount))
七、测试运行
1.空文件
2.只有一个字符的文件(#)
3.只有一个词的文件(test)
4.只有一行的文件(i like it very much.)
5.一个典型的源文件
八、项目小结
此次是我第一次用python编写一个完整的小工程。由于暑假后半段时间有空闲,学了些许python,然后就拿这个作业来练练手了。
过程中遇到的问题有很多,所以学习新东西的时间出乎意料的长,说一些主要的问题:
一是对许多模块功能没有使用过,特别是argparse模块,花费了大量时间;
二是该项目涉及到的部分函数没有接触过,对其用法的学习也花费了不少时间;
三是其中对于读取文件的编码方式,一开始经常读取错误,后来把编码方式限定为‘utf-8’才解决问题;
四是对于.c文件中含有中文字符的代码文件的计算会出错,这个bug至今没有修复,由于开始项目的时间较晚,且最后在编辑博客贴运行结果截图的时候才偶然发现,已经没有足够的时间,留待日后有空再进行修复。
总的来说本次作业的完成不算是顺利,由于时间问题没有完全修复bug以及完成扩展功能,但也基本完成了基础功能。此次作业对我的提升还是挺大的,毕竟之前并未尝试独立完成一个软件工程,以后可以继续尝试。
posted on 2018-09-14 21:43 hzquestion 阅读(287) 评论(0) 编辑 收藏 举报