通过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= ...
随机推荐
- Java8函数式接口和Lambda表达式
两者关系: Lambda表达式就是函数式接口(FunctionalInterface)实现的快捷方式,它相当于函数式接口实现的实例,因为在方法中可以使用Object作为参数,所以把Lambda表达式作 ...
- Python极其简单的分布式异步作业管理系统RQ入门
Python极其简单的分布式异步作业管理系统RQ入门 原创 2017-08-19 lixing 生信人 Python极其简单的分布式异步作业管理系统RQ入门 1. 什么是Job? Job直译过来就是工 ...
- Drools简单例子
转自:http://www.blogjava.net/diggbag/articles/359347.html 1.Drools简单例子 首先是搭建一个可供进行Drools开发的框架.Jboss官方推 ...
- day9-IO心得
Gevent协程 Select\Poll\Epoll异步IO与事件驱动 Python连接Mysql数据库操作 RabbitMQ队列 Redis\Memcached缓存 Paramiko SSH Tws ...
- C链表
结构指针的应用,链表处理 1,链表的概念 链表是将若干数据项按一定规则连接起来的[数据类型]表,链表中的每一个数据称为一个节点,既链表是由称为节点的元素组成的,节点多少根据需要确定. 链表连接规则: ...
- idea使用jrebel热部署插件
首先通过idea下载JReble插件 访问http://idea.lanyus.com/网站 跟着弹出框的步骤走就可以实现了: 在idea中使用tomcat部署项目 不要使用war:使用下面的文件
- .net Core 2.0使用NLog
最近研究了一下NLog的使用方式,简单的入了一下门. 实现的功能,对于不同的日志,进行不同的记录,分别有系统运行日志,和个人在程序中写的异常日志.发布之后放在了IIS上.进行查看日志的信息 参考了两篇 ...
- SData:优雅的数据交换方案
SData的网址是https://github.com/knat/SData. 数据交换方案可以分为两类:有纲要(schema)的和无纲要的.有纲要的数据交换方案有Google的Protocol Bu ...
- spring boot aop打印http请求回复日志包含请求体
一.引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...
- Linux下Mysql数据库互为主从的配置过程
配置准备: 两台机器:A(193.168.10.101) B(193.168.10.102) mysql大版本需要一致,小版本可忽略 配置过程: A(193.168.10.101) 机器配置: 执行 ...