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 参数。这个参数单独使用。如果命令行有这个参数,则程序会显示图形界面,用户可以通过界面选取单个文件,程序就会显示文件的字符数、行数等全部统计信息。
| 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以及完成扩展功能。不过此次作业对我的提升还是挺大的,毕竟之前并未尝试独立完成一个软件工程。
原文:https://www.cnblogs.com/hzquestion/p/9649142.html