小白&python实现wc基本功能&扩展功能

项目github地址https://github.com/linlixina/wc

项目实现功能:

基本功能列表

  1. wordCounter.exe -c file.c //返回文件 file.c 的字符数
  2. wordCounter.exe -w file.c //返回文件 file.c 的词的数目
  3. wordCounter.exe -l file.c //返回文件 file.c 的行数

扩展功能

  1. wordCounter.exe -s file //递归处理目录下符合条件的文件。
  2. wordCounter.exe -a file.c //返回更复杂的数据(代码行 / 空行 / 注释行)。

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

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

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

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


PSP2.1


Personal Software Process Stages


预估耗时(分钟)


实际耗时(分钟)


Planning


计划

 90  90

· Estimate


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

90  90

Development


开发

365  385

· Analysis


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

 240  240

· Design Spec


· 生成设计文档

 20  20

· Design Review


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

 30  30

· Coding Standard


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

 15  15

· Design


· 具体设计

180 180

· Coding


· 具体编码

 180  200

· Code Review


· 代码复审

 120  120

· Test


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

 180  180

Reporting


报告

 165  165

· Test Report


· 测试报告

 120  120

· Size Measurement


· 计算工作量

 15  15

· Postmortem & Process Improvement Plan


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

 30  30

合计

   620  640

关键代码:

argparse模块的调用:

 1 from optparse import OptionParser
 2 parser = OptionParser()
 3 parser.add_option("-l", "--line",
 4                   dest="lines",
 5                   action="store_true",
 6                   default=False,
 7                   help="count lines")
 8 parser.add_option("-w", "--word",
 9                   dest="words",
10                   action="store_true",
11                   default=False,
12                   help="count words")
13 parser.add_option("-c", "--char",
14                   dest="chars",
15                   action="store_true",
16                   default=False,
17                   help="count chars")
18 parser.add_option("-a", "--aaa",
19                   dest="aaas",
20                   action="store_true",
21                   default=False,
22                   help="count aaas")
23 parser.add_option("-s", "--subject",
24                   dest="subjects",
25                   action="store_true",
26                   default=False,)
27 options, args = parser.parse_args()

主要函数,对读取文件进行处理:

 1 def read_message(_files):
 2     for file in _files:
 3         f = judge(file)
 4         if f:
 5             with open(file, encoding="ISO-8859-1") as files:
 6                 cs = files.read()
 7                 chars = len(cs)
 8                 words = len(cs.split())
 9                 files.close()
10             with open(file, encoding="ISO-8859-1") as files:
11                 ls = files.readlines()
12                 lines = len(ls)
13                 files.close()
14             with open(file, encoding="ISO-8859-1") as files:
15                 l_ines = files.readlines()
16                 codelines, emptylines, commentlines = [], [], []  # 将满足条件的特殊行加入对应的列表中
17                 for line in l_ines:
18                     tmpline = line.replace(‘ ‘, ‘‘)
19                     tmpline = tmpline.replace(‘\t‘, ‘‘)
20                     tmpline = tmpline.replace(‘\n‘, ‘‘)
21                     if len(tmpline) == 1 or len(tmpline) == 0:  # 判断是否为空行
22                         emptylines.append(line)
23                     elif tmpline.startswith(‘//‘):  # 判断是否为注释行
24                         commentlines.append(line)
25                     else:
26                         codelines.append(line)
27                 codelines = len(codelines)  # 通过列表长度判断特殊行行数
28                 emptylines = len(emptylines)
29                 commentlines = len(commentlines)
30                 wc_print(lines, words, chars, codelines, emptylines, commentlines)
31                 print(file)
32         else:
33             continue
根据不同的指令输出不同的值:
def wc_print(lines, words, chars, codelines , emptylines ,commentlines):
    if options.lines:
        print(‘行数:‘ + str(lines)),
    if options.words:
        print(‘词数:‘ + str(words)),
    if options.chars:
        print(‘字符数:‘ + str(chars)),
    if options.aaas:
        print(‘代码行/空行/注释行:‘ + str(codelines) + ‘/‘ + str(emptylines) + ‘/‘ + str(commentlines)),
    if options.subjects:
        print(‘行数:‘ + str(lines)),
        print(‘词数:‘ + str(words)),
        print(‘字符数:‘ + str(chars)),
        print(‘代码行/空行/注释行:‘ + str(codelines) + ‘/‘ + str(emptylines) + ‘/‘ + str(commentlines)),

运行结果示例:

过程中遇到的问题

1.对argparse模块不熟悉;

2.打开文件的编码问题:刚开始默认gpk无法识别。后来换utf-8还不行,最后百度到转为‘ISO-8859-1‘,问题解决。

原文地址:https://www.cnblogs.com/justin-bieber/p/9644029.html

时间: 2024-11-11 16:50:44

小白&python实现wc基本功能&扩展功能的相关文章

小白のjava实现wc.exe功能

GitHub地址 项目完成情况 基本功能列表(已实现) wc.exe -c file.c     //返回文件 file.c 的字符数 wc.exe -w file.c    //返回文件 file.c 的词的数目 wc.exe -l file.c      //返回文件 file.c 的行数 扩展功能(已实现) -s   递归处理目录下符合条件的文件.    -a   返回更复杂的数据(代码行 / 空行 / 注释行). 空行:本行全部是空格或格式控制字符,如果包括代码,则只有不超过一个可显示的

c#实现wc基本功能和扩展功能

c#实现wc基本功能和扩展功能 github:链接 一.项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数.单词数和行数. 实现一个统计程序,它能正确统计程序文件中的字符数.单词数.行数,以及还具备其他扩展功能,并能够快速地处理多个文件. 基本功能列表: wc.exe -c file.c //返回文件 file.c 的字符数 wc.exe -w file.c /

python实现whois查询功能的方法源码

恐怕很多朋友跟我一样,使用python语言居然能实现whois服务器查询功能.下面我把代码和说明搬来给大家看看,有谁需要可以参考下.本来想直接从whois服务器查询的,但是发现要写socket 用43端口链接服务器,但是有些服务器的地址不清楚,而且查询命令貌似有改变所以不想折腾了,就想着直接用chinaz的页面实现一下算了.如下代码是在 win7下操作的,安装python3.2测试通过. Python3.2实现whois查询功能的方法源码: # -*- coding:utf-8 -*- impo

python IDLE 自动提示功能

\Python27\Lib\idlelib\目录下 config-extensions.def文件修改等待时间 [AutoComplete] enable=1 popupwait=2000(2000表示2秒,修改为0) AutoComplete.py文件修改提示模块 import os import sys import string 在后面加载待提示的模块(import方式) 如: import urllib import urllib2 import re import cookielib

Atitit php java python nodejs错误日志功能的比较

Atitit php  java  python  nodejs错误日志功能的比较 1.1. Php方案 自带 1 1.2. Java解决方案 SLF4J 1 1.3. Python解决方案 自带loggin 2 1.4. Node.js日志解决方案 log4js 2 1.4.1. 玩转Nodejs日志管理log4js - CNode技术社区 2 日志的俩中模式   文件日志与os event 日志.. Os日志的优点是格式整齐.以及有默认os工具gui故居查询等.. 1.1. Php方案 自带

Eclipse+python的安装与使用(详细阐述了eclipse编写Python程序的基本功能及技巧)

安装环境说明: 操作系统:win7 JDK:jdk1.7.0_11 下载网址:http://www.oracle.com/technetwork/java/javase/downloads/index.html Eclipse:eclipse-jee-kepler-SR2-win32-x86_64 下载网址: http://www.eclipse.org/downloads/ http://www.eclipse.org/downloads/download.php?file=/technolo

10min手写(五):面试题解析丨Python实现tail -f功能

作者:蜗牛 shengxinjing (woniuppp) · GitHub 写这篇文章的初衷是有人去面试遇到了这个笔试题,不知道怎么做,没有什么思路,就发到了Reboot 的交流群里,让大家一起讨论讨论. 关于这道题,简单说一下我的想法吧.当然,也有很好用的 pyinotify 模块专门监听文件变化,不过我更想介绍的,是解决的思路.毕竟作为面试官,还是想看到一下解决问题的思路,而且我觉得这一题的难点不在于监控文件增量,而在于怎么打印最后面10行. 希望大家在读这篇文章前,对 Python 基础

Python os模块 常用功能小结

Python os模块 常用功能小结 os 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作 1, os.name: 字符串指示你正在使用的平台.比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'. 2, os.stat(file):文件属性操作: 3, os.getcwd():得到当前工作目录,即当前Python脚本工作的目录路径: 4,

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

这里使用了 python 的基本代码实现了 Linux 系统下 wc 命令程序的基本功能. #!/usr/bin/env python #encoding: utf-8 # Author: liwei # Function: wc program by python from optparse import OptionParser import sys,os def opt(): parser = OptionParser() parser.add_option('-c', '--char',