软件工程——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的主要内容,如果未能解决你的问题,请参考以下文章

EasyClick 运行代码片段出Null

Sphinx、reStructuredText 显示/隐藏代码片段

985大学的高材生只会写代码片段,丢人吗?

985高校的高材生只会写代码片段,丢人吗?

985大学的高材生只会写代码片段,丢人吗?

985大学的高材生只会写代码片段,丢人吗?