Python实现Word-Counter

一、前言

Github地址:https://github.com/hzquestion/Word-Counter

二、项目概述

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

处理模式:

python Word-Counter.py [parameter] [filename] 

基本功能列表(实现):

  • Word-Counter.py -c file.c  //返回文件 file.c 的字符数
  • Word-Counter.py -w file.c  //返回文件 file.c 的词的数目
  • 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的更多相关文章

  1. 软件工程作业——Word Counter

    github地址 https://github.com/Pryriat/Word_Counter 项目说明 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命 ...

  2. 第三周作业--Word Counter

    需求分析: 1.写出一个程序,模仿wc.exe,通过输入文件名,实现文件内容读取: 2.统计出文件内容的总字符数.总单词数.行数.每行字符数.每行单词数. 代码分析: 一.打开文件. FILE *fp ...

  3. 软件工程firstblood

    https://github.com/happyeven/WC 项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿已有wc.exe 的 ...

  4. 小白Linux入门 四

    http://edu.51cto.com/lesson/id-11372.html 28了 文件管理类命令 目录: mkdir mkdir /tmp/x mkdir -p /tmp/a/b -pv b ...

  5. 【大数据】Linux下Storm(0.9版本以上)的环境配置和小Demo

    一.引言: 在storm发布到0.9.x以后,配置storm将会变得简单很多,也就是只需要配置zookeeper和storm即可,而不再需要配置zeromq和jzmq,由于网上面的storm配置绝大部 ...

  6. Flex的正则表达式匹配速度与手工代码的比较

    flex是一个词法分析器生成器,它是编译器和解释器编程人员的常用工具之一.flex的程序主要由一系列带有指令(称为动作代码)的正则表达式组成.在匹配输入时,flex会将所有的正则表达式翻译成确定性有穷 ...

  7. Storm工程创建

    1.创建maven项目: pom.xml: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&quo ...

  8. Asp.net MVC Bundle 的使用与扩展

    一.Asp.net 自带Bundle的使用: 1. 在Globale中注册与配置 BundleConfig.RegisterBundles(BundleTable.Bundles); public c ...

  9. Hadoop平台提供离线数据和Storm平台提供实时数据流

    1.准备工作 2.一个Storm集群的基本组件 3.Topologies 4.Stream 5.数据模型(Data Model) 6.一个简单的Topology 7.流分组策略(Stream grou ...

  10. word2vec代码解释

    以前看的国外的一篇文章,用代码解释word2vec训练过程,觉得写的不错,转过来了 原文链接 http://nbviewer.jupyter.org/github/dolaameng/tutorial ...

随机推荐

  1. 以太坊(Ethereum) - 节点时间未同步和区块同步失败案例分析

    背景 以太坊技术搭建的区块链网络,节点间需要保证时间一致,才能正常有序的发送交易和生成区块,使得众多节点共同维护分布式账本(区块数据+状态数据).但是,网络中节点的系统时间不一致回出现什么现象呢,我们 ...

  2. JSON类库Jackson与JSON-lib性能对比[转]

    Jackson:http://jackson.codehaus.org/ JSON-lib:http://json-lib.sourceforge.net/ Gson:http://code.goog ...

  3. TeeChart缩放

    //缩放的技巧 //首先找到待缩放的区域,例如横轴x1-x2,纵轴y1-y2 //那么待放到的区域就是x=x1;x=x2;y=y1;y=y2;这四条线组成的矩形 //首先确定矩形的左上角的坐标,然后确 ...

  4. 【第十章】 springboot + logback

    logback是boot默认的日志首选,个人觉得是最好的日志实现(比log4j好) 下边,在之前的代码基础上增加一个功能,该功能要实现mybatis的and or联查功能,并通过logback日志在控 ...

  5. json字符窜转对象

    第一种方法: 注意引用:using System.Runtime.Serialization.Json; using System.IO; static void Main(string[] args ...

  6. 浅谈java中死锁问题

    知识点:死锁的产生.死锁的实例 一:死锁的产生 我们在解决多线程共享资源的线程同步问题时,会使用synchronized关键字修饰方法或者通过Lock加锁方式修饰方法.代码块,防止多个线程访问统一资源 ...

  7. 《EMCAScript6入门》读书笔记——22.Module的语法

  8. Java filter中的chain.doFilter详解

    转载: 一.chain.doFilter作用 1.一般filter都是一个链,web.xml 里面配置了几个就有几个.一个一个的连在一起 request -> filter1 -> fil ...

  9. 【TCP/IP详解 卷一:协议】第十二章 广播与多播 ping实验

    我手机连接到wifi上所分配到的IP地址:192.168.1.116 子网掩码:255.255.255.0 路由器:192.168.1.1 ping 192.168.1.116 (ping 一台主机的 ...

  10. 《A_Pancers团队》作业5—团队项目需求改进与系统设计

    一:团队项目需求改进 1. <音乐播放软件需求规格说明书>的不足 在上周的<音乐播放软件需求规格说明书>我们还需要改进的地方有:1.搜索功能:2.界面的简洁美观化:3.按键的重 ...