通过python实现wc基本功能,,---恢复内容开始-


---恢复内容开始---

1.Github项目地址:

https://github.com/zhg1998/ww/blob/master/wc.py

2.项目相关要求:

写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数、单词数和行数。

实现一个统计程序,它能正确统计程序文件中的字符数、单词数、行数,以及还具备其他扩展功能,并能够快速地处理多个文件。

具体功能要求:
程序处理用户需求的模式为:

wc.exe [parameter] [file_name]

基本功能列表:

wc.exe -c file.c //返回文件 file.c 的字符数 (已实现)

wc.exe -w file.c //返回文件 file.c 的词的数目 (已实现)

wc.exe -l file.c //返回文件 file.c 的行数 (已实现)

扩展功能:
-s 递归处理目录下符合条件的文件。
-a 返回更复杂的数据(代码行 / 空行 / 注释行)。

空行:本行全部是空格或格式控制字符,如果包括代码,则只有不超过一个可显示的字符,例如“{”。

代码行:本行包括多于一个字符的代码。

注释行:本行不是代码行,并且本行包括注释。一个有趣的例子是有些程序员会在单字符后面加注释:

} //注释
在这种情况下,这一行属于注释行。

[file_name]: 文件或目录名,可以处理一般通配符。

高级功能:

-x 参数。这个参数单独使用。如果命令行有这个参数,则程序会显示图形界面,用户可以通过界面选取单个文件,程序就会显示文件的字符数、行数等全部统计信息。

3.PSP表

PSP2.1

Personal Software Process Stages

预估耗时(小时)

实际耗时(小时)

Planning

计划

1

2

· Estimate

· 估计这个任务需要多少时间

50

60

Development

开发

32

40

· Analysis

· 需求分析 (包括学习新技术)

8

10

· Design Spec

· 生成设计文档

1

1.5

· Design Review

· 设计复审 (和同事审核设计文档)

0.5

0.5

· Coding Standard

· 代码规范 (为目前的开发制定合适的规范)

1

1.5

· Design

· 具体设计

2

5

· Coding

· 具体编码

24

30

· Code Review

· 代码复审

2

2

· Test

· 测试(自我测试,修改代码,提交修改)

1

2

Reporting

报告

1

1

· Test Report

· 测试报告

1

1.5

· Size Measurement

· 计算工作量

0.5

0.5

· Postmortem & Process Improvement Plan

· 事后总结, 并提出过程改进计划

1

1

合计

126

158.5

4.解题思路

拿到题目后,我认为用python写会比较的简便,以为实现wc的功能比较容易完成,只是我对python的了解比较浅,所以只实现了基础功能。由于是对字符数,词数,和行数的统计,需要先打开文件,然后用一个for循环和实现对字符数,行数和单词数的统计,其中我在单词数的统计中遇到了困难,经过思考后,我决定通过将空格替代掉代码行前后的非数字和字母后删去空格的方法以及使用正则表达实现了对单词数的统计,由于实现基础功能所消耗的时间较长,所以我没有做后续的扩展功能和高级功能。

5.设计实现过程

通过main函数对文件的读取和输出对应指令的统计数值,调用了open()的方法打开文件和条件判断语句输出相应值,在read_file()中对三个基本功能的实现,调用了len()函数,line.strip()函数以及使用了正则表达式对单词统计功能的实现。

6.代码说明

1.三种基本功能的实现

技术分享图片

2.主函数,打开文件以及输出对应指令的统计值。

技术分享图片

7.测试运行

测试文件

技术分享图片

测试结果

技术分享图片

测试文件

技术分享图片

测试结果

技术分享图片

测试文件

技术分享图片

测试结果

技术分享图片

8.代码覆盖率

技术分享图片

9.项目小结

我是通过课余时间断断续续来进行python的学习的,也没怎么经过练习,所以用起来任然是比较生疏。看到作业后,我就想尝试一下用python去实现,虽然只实现了简单的基础功能,然而编写代码的过程还是遇到了不小的困难。从构思到编程,我还回书中和网上查找各函数的用法,也算是当做一次复习,不过也耗费了一些时间。这是我第一次列psp表以及写博客,在psp表中预估的时间和实际耗费的时间还是有些出入,这次作业让我初步体验到了软件工程开发的严谨以及规范性,同时我也发现了列psp表的好处,能更好的规划好时间。总的来说,这次作业的练习让我知道自己编程的能力还是较差以及对python的理解和用法还是较为生疏,同时应该在接下来的学习中更加努力来提高自己的能力。

---恢复内容结束---

通过python实现wc基本功能

评论关闭