软件工程——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

四、解题思路描述

  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以及完成扩展功能,但也基本完成了基础功能。此次作业对我的提升还是挺大的,毕竟之前并未尝试独立完成一个软件工程,以后可以继续尝试。

posted on 2018-09-14 21:43  hzquestion  阅读(287)  评论(0编辑  收藏  举报