GitHub仓库:https://github.com/15crmor/PAC

项目要求

  • 基本要求

    • -c 统计文件字符数 (实现)

    • -w 统计文件词数 (实现)

    • -l 统计文件行数(实现)

  • 扩展功能

    • -s 递归处理目录下符合条件得文件(实现)
    • -a 返回文件代码行 / 空行 / 注释行(实现)
  • 高级功能

    • -x 图形化界面(未实现)

解题思路

  •  实现对文本的统计
    • 读取文件
    • 使用正则表达式处理文本内容
  • 再实现拓展功能更复杂的统计及批量操作
    • 用os模块获取文件以及判断是文件或目录
    • 遍历目录下所有符合的文件
  • 最后实现命令参数解析
    • 用sys模块实现在命令行解析参数

设计

  • 将各个功能放在不同文件中

    •  主文件及相应模块

      •  WC.py:

        • recursive(list) (遍历文件)
        • wc(f, arg) (实现命令参数解析)
    •  统计字符文件及模块
      •  strCount.py:

        • str_count(name)
    •  统计行数文件及模块:
      •  lineCount.py:

        • line_count(name)
    • 统计单词文件及模块:
      •  wordsCount.py:

        • words_count(name)
    • 统计代码行/空行/注释行文件及模块:
      • codeCount.py:

        • code_count(name)

流程图

代码说明

1. 遍历文件

def recursive(list):
f_list = os.listdir(list)
return f_list

2. 统计字符数

def str_count(name):
with open(name, 'r', encoding='UTF-8') as f:
n = 0
for line in f.readlines():
n += len(line)
return n

3. 统计行数

def line_count(name):
with open(name, 'r', encoding='UTF-8') as f:
n = 0
for line in f:
n += 1
return n

4. 统计单词数

import re

def words_count(name):
with open(name, 'r', encoding='UTF-8') as f:
n = 0
for line in f.readlines():
list_match = re.findall('[a-zA-Z]+', line.lower())
n += len(list_match)
return n

5. 统计空行/代码行/注释行数

def code_count(name):
with open(name, 'r', encoding='UTF-8') as f:
code_lines = 0
comm_lines = 0
space_lines = 0
for line in f.readlines():
if line.strip().startswith('#'):
comm_lines += 1
elif line.strip().startswith("'''") or line.strip().startswith('"""'):
comm_lines += 1
elif line.count('"""') == 1 or line.count("'''") == 1:
while True:
line = f.readline()
comm_lines += 1
if ("'''" in line) or ('"""' in line):
break
elif line.strip():
code_lines += 1
else:
space_lines += 1 return code_lines, comm_lines, space_lines

6. 命令行逻辑

def wc(f, arg):
if arg[1] == '-c':
str_num = str_count(f)
print(f + "文件字符数为: ", str_num)
elif arg[1] == '-w':
word_num = words_count(f)
print(f + "文件单词数为:", word_num)
elif arg[1] == '-l':
line_num = line_count(f)
print(f + "文件行数为:", line_num)
elif arg[1] == '-a':
code_lines_num, comm_lines_num, space_lines_num = code_count(f)
print(f + "文件代码行为:", code_lines_num)
print("注释行为:", comm_lines_num)
print("空行为:", space_lines_num)

测试运行

由于事先设置了工作路径所以默认路径与代码所在路径不同

  • 基本模块测试

  • 扩展模块测试

  • 递归遍历文件夹下文件测试

  • 文件名出错时

代码覆盖率

PSP

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

60

60

· Estimate

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

60

60

Development

开发

300

360

· Analysis

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

60

100

· Design Spec

· 生成设计文档

30

30

· Design Review

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

20

30

· Coding Standard

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

30

20

· Design

· 具体设计

30

30

· Coding

· 具体编码

240

300

· Code Review

· 代码复审

30

40

· Test

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

60

60

Reporting

报告

20

30

· Test Report

· 测试报告

60

60

· Size Measurement

· 计算工作量

20

20

· Postmortem & Process Improvement Plan

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

20

30

合计

1040

 1220

项目总结

  以前写代码从没考虑过这么多,总是思考一阵之后便直接上手,遇到什么问题就查书查网上资料解决,突然想改就把之前写的模块推翻重来,因此也做了不少无用功,而且也很少总结,现在这样虽然工作量多了但是却感觉比以前开发要更快,少走了不少弯路,而且有写了博客后也感觉比之前掌握的更加扎实。

Python 实现WC功能的更多相关文章

  1. 软件工程—WC功能实现 (JAVA)

    软件工程-WC功能实现(JAVA) Github项目地址:https://github.com/Ousyoung/wc 项目要求 ​ wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和 ...

  2. Python实现截图功能你肯定不会吧?【面试必学】

    前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:CyborgLin python实现截图功能. windows环境下.需 ...

  3. 【python库模块】Python subprocess模块功能与常见用法实例详解

    前言 这篇文章主要介绍了Python subprocess模块功能与常见用法,结合实例形式详细分析了subprocess模块功能.常用函数相关使用技巧. 参考 1. Python subprocess ...

  4. Python实现截图功能

    Python实现截图功能 Windows环境下需要用到PIL库,使用pip安装PIL库: pip install Pillow 安装完成,截图方法代码: from PIL import ImageGr ...

  5. 使用 python 实现 wc 命令程序的基本功能

    这里使用了 python 的基本代码实现了 Linux 系统下 wc 命令程序的基本功能. #!/usr/bin/env python #encoding: utf-8 # Author: liwei ...

  6. 通过python实现wc基本功能

    ---恢复内容开始--- 1.Github项目地址: https://github.com/zhg1998/ww/blob/master/wc.py 2.项目相关要求: 写一个命令行程序,模仿已有wc ...

  7. Python模拟wc命令(软件测试第二次作业)

    Python实现字符,单词,行,代码行,空行及可视化 Gitee项目地址:https://gitee.com/biubiubiuLYQ/word_and_character_statistics 一. ...

  8. python实现curl功能

    之前写过一篇文章关于python CURL模块的,在这里我们从urllib来实现同样的功能.具体代码如下: import urllib import urllib2 import json #发起请求 ...

  9. 利用PYTHON设计计算器功能

    通过利用PYTHON 设计处理计算器的功能如: 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 ))- (-4*3 ...

随机推荐

  1. HTML 求阶乘之和

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. Mysql通过SQL脚本复制表

    create table if not exists t_dest like t_src 其中,t_src是要复制的原始表,t_dest是要创建的新表.

  3. 大型运输行业实战_day09_2_站间互售实现

    1.添加站间互售入口 对应的html代码 <button onclick="otherStation()">站间互售</button> 对应的js发送函数 ...

  4. Web标准:九、CSS表单设计

    Web标准:九.CSS表单设计 知识点: 1.改变文本框和文本域样式 2.用图片美化按钮 3.改变下拉列表样式 4.用label标签提升用户体验   1)改变文本框和文本域样式 文本框标签:<i ...

  5. Android 最火开发框架 xUtils

    xUtils简介 xUtils3 api变化较多, 已转至 https://github.com/wyouflf/xUtils3 xUtils 2.x对Android 6.0兼容不是很好, 请尽快升级 ...

  6. 如何使用eclipse搭建maven环境以及常见的错误

    这篇博客适合零基础学习maven,搭建maven以及运行项目,常见的错误,我会在结尾写出说明白,看是否和大家的错误一样,或者文章的括号注释部分也会写出一些注意点. 第一步:就是下载maven,以及配置 ...

  7. Hook钩子编程

    钩子(Hook),是Windows消息处理机制的一个平台,钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统,以监视指定窗口的某种消息.每当特定的消息发出,在没有到达目的窗口前,钩子程序就先 ...

  8. php.ini memory_limit引起的问题

    故障现象    在运行PHP程序,通常会遇到“Fatal Error: Allowed memory size of xxxxxx bytes exhausted”的错误, 这个意味着PHP脚本使用了 ...

  9. CMakeList 编写规则 -1

    CMAKE 常见指令 CMAKE_MINIMUM_REQUIRED(VERSION 2.8) PROJECT(XXX) SET(CMAKE_BUILD_TYPE Release) SET(CMAKE_ ...

  10. Thread.currentThread().getName() ,对象实例.getName() 和 this.getName()区别

    原文链接:http://www.cnblogs.com/signheart/p/922dcf75dd5fe6b418d4475af89c4664.html 使用Thread.currentThread ...