软件工程——Word-Counter
Posted hzquestion
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件工程——Word-Counter相关的知识,希望对你有一定的参考价值。
Python实现Word-Counter
一、前言
Github地址:https://github.com/hzquestion/Word-Counter
二、项目概述
实现一个统计程序,它能正确统计程序文件中的字符数、单词数、行数,以及还具备其他扩展功能,并能够快速地处理多个文件。
处理模式:
python Word-Counter.py [parameter] [filename]
基本功能列表(实现):
1.Word-Counter.py -c file.c
//返回文件 file.c 的字符数
2.Word-Counter.py -w file.c
//返回文件 file.c 的词的数目
3.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 |
四、解题思路描述
1.读取文件,并完成对文件的处理工作
2.对基础功能进行分析,先完成基础功能
3.测试运行,修复bug
4.优化代码,尝试完成扩展功能
五、设计实现过程
1.实现计算字符数的函数
2.实现计算单词数的函数
3.实现计算行数的函数
4.设计主函数输出结果
5.用不同的源代码文件进行测试
6.优化代码
六、代码说明
计算字符数
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以及完成扩展功能。不过此次作业对我的提升还是挺大的,毕竟之前并未尝试独立完成一个软件工程。
以上是关于软件工程——Word-Counter的主要内容,如果未能解决你的问题,请参考以下文章