通过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基本功能的更多相关文章
- Atitit php java python nodejs错误日志功能的比较
Atitit php java python nodejs错误日志功能的比较 1.1. Php方案 自带 1 1.2. Java解决方案 SLF4J 1 1.3. Python解决方案 自带lo ...
- Python实现进度条功能
Python实现进度条功能 import sys, time def progress(percent, width=50): # 设置进度条的宽度 if percent >= 100: # 当 ...
- 使用 python 实现 wc 命令程序的基本功能
这里使用了 python 的基本代码实现了 Linux 系统下 wc 命令程序的基本功能. #!/usr/bin/env python #encoding: utf-8 # Author: liwei ...
- Python 实现WC功能
GitHub仓库:https://github.com/15crmor/PAC 项目要求 基本要求 -c 统计文件字符数 (实现) -w 统计文件词数 (实现) -l 统计文件行数(实现) 扩展功能 ...
- Python模拟wc命令(软件测试第二次作业)
Python实现字符,单词,行,代码行,空行及可视化 Gitee项目地址:https://gitee.com/biubiubiuLYQ/word_and_character_statistics 一. ...
- python实现简单爬虫功能
在我们日常上网浏览网页的时候,经常会看到一些好看的图片,我们就希望把这些图片保存下载,或者用户用来做桌面壁纸,或者用来做设计的素材. 我们最常规的做法就是通过鼠标右键,选择另存为.但有些图片鼠标右键的 ...
- Python:安装mssql模块功能,并实现与sqlserver连接、查询
由于我系统是x64系统,所以下载python2.7 x64.下载地址:https://www.python.org/downloads/release/python-2712/, 经过测试发现这个版本 ...
- python10min系列之面试题解析:python实现tail -f功能
同步发布在github上,跪求star 这篇文章最初是因为reboot的群里,有人去面试,笔试题有这个题,不知道怎么做,什么思路,就发群里大家讨论 我想了一下,简单说一下我的想法吧,当然,也有很好用的 ...
- Python实现脚本锁功能,同时只能执行一个脚本
1. 文件锁 脚本启动前检查特定文件是否存在,不存在就启动并新建文件,脚本结束后删掉特定文件. 通过文件的判断来确定脚本是否正在执行. 方法实现也比较简单,这里以python脚本为例 #coding= ...
随机推荐
- 深入浅出 Java Concurrency (7): 锁机制 part 2 AQS
在理解J.U.C原理以及锁机制之前,我们来介绍J.U.C框架最核心也是最复杂的一个基础类:java.util.concurrent.locks.AbstractQueuedSynchronizer ...
- 小酌Jmeter4.0新版本特性
1. 首先下载打开jmeter4.0,说一个能感受到的视觉变化,如图, 黑色界面,不少朋友认为做技术黑色的东西看起来高上大一点,虽然这个观念有点肤浅,但似乎也有点道理,毕竟还是有不少朋友热衷于lin ...
- 抛java.lang.NoClassDefFoundError: org.joda.time.ReadablePeriod错误
转自:http://www.codeorg.cn/article/detail/qa/542 在进行activiti环境搭建时总是抛出java.lang.NoClassDefFoundError: o ...
- delphi 浮点 精度
double 没有问题, Single有问题 '0.7' 0.69999999999999996 Single; // 4 byte real Double; // 8 byte real
- VS编译静态库 .lib 其中Release 版本比Debug版本要大好多原因
如果工程代码使用了: 把此选项关闭即可减少库大小不少:
- Javascript中prototype属性详解 (存)
Javascript中prototype属性详解 在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实例.但是在Javascript语言体系中,是不 ...
- Vulkan Tutorial 26 Image view and sampler
操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 在本章节我们将为图形管线创建另外两个资源来对图像进行采样.第一个资源我们之前已经接触 ...
- Tomcat集群---Cluster节点配置
<!-- Cluster(集群,族) 节点,如果你要配置tomcat集群,则需要使用此节点. className 表示tomcat集群时,之间相互传递信息使用那个类来实现信息之间的传递. cha ...
- iOS学习之UIPickerView控件的关联选择
接上篇iOS学习之UIPickerView控件的简单使用 接着上篇的代码 http://download.csdn.net/detail/totogo2010/4391870 ,我们要实现的效果如下: ...
- linux系统的命令组与函数
一.命令组 许多时候,我们在shell操作上,需要在一定条件下一次执行多个命令,也就是说,要么不执行,要么就全执行,而不是每次依序的判断是否要执行下一个命令.或是,需要从一些命令执行优先次顺中得到豁免 ...