项目github地址:https://github.com/holidaysss/WC

 

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

执行代码:

 

 

if __name__ == '__main__':
    opts, args = getopt.getopt(sys.argv[1:], "hc:w:l:s:a:")
    files_list = []  # 相应后缀文件列表
    main(opts)

 

 

主要函数

count_word : 统计文件的词数(单词) (基本功能 -w)

def count_word(file):
    list = open(file, 'r', encoding='utf-8').read()
    word_list = []
    end = 0
    for i in range(len(list)):  # 遍历全文
        if list[i].isalpha() and i >= end:  # 词首(字母)
            for j in range(i, len(list)):
                if (list[j].isalpha() == 0) or (j == len(list)-1):  # 词尾(非字母)
                    word_list.append(list[i: j])  #
                    end = j
                    break
    word_list.pop(-1)
    for k, v in Counter(word_list).items():
        print('{}: {}'.format(k, v))
    num = len(word_list)
    print('总词数: {}'.format(num))

 

 

count_char, count_line :统计字符数和行数  (基本功能 -c, -l)

def count_char(file):
    num = len(open(file, 'r', encoding='ISO-8859-1').read())
    print("文件{}的字符数(包括换行符)为{}".format(file, num))


def count_line(file):
    print('文件{}的行数:'.format(file) +
          str(len(open(file, 'r', encoding='ISO-8859-1').readlines())))

 

 

down_find: 递归查询当前目录下相应后缀(hz)的文件, 返回文件列表files  (拓展功能 -s)

recursion: 对文件列表进行第二选项串判断,执行相应处理

def down_find(dir, hz):
    dir_files = os.listdir(dir)  # 路径下的文件列表
    for i in dir_files:  # 生成子目录
        son_path = os.path.join(dir, i)
        if os.path.isdir(son_path):  # 如果是目录,递归操作
            down_find(son_path, hz)
        elif hz in son_path:
            files_list.append(son_path)
    return files_list


def recursion(value):
    op2 = value[0: 2]  # 第二选项串
    hz = args[0]  # 文件后缀参数
    dir = os.getcwd()  # 当前路径
    files = down_find(dir, hz)  # 返回相应后缀文件列表
    print("当前目录下符合后缀{}的文件有: {}".format(hz, files))
    for file in files:
        if op2 == "-c":  # 返回字符数
            count_char(file)
        elif op2 == "-w":  # 返回词的数目
            count_word(file)
        elif op2 == "-l":  # 返回行数
            count_line(file)
        elif op2 == '-a':
            more_data(file)

 

 

 

more_data: 返回文件空行,代码行,注释行数  (拓展功能 -a)

def more_data(value):
    code_line = blank_line = comment_line = 0
    end = -1
    lines = open(value, 'r', encoding='ISO-8859-1').readlines()
    for i in range(len(lines)):
        if '#' in lines[i] and (i > end):  # 单行注释
            comment_line += 1
        elif len(lines[i].strip()) <= 1:  # 空行
            blank_line += 1
        elif lines[i][0].isalpha() and (i > end) and ('#' not in lines[i]):  # 代码行
            code_line += 1
        elif lines[i].startswith('"""') and (i > end):  # 多行注释
            for j in range(i + 1, len(lines)):
                if lines[j].startswith('"""'):
                    comment_line += (j - i + 1)
                    end = j
        elif lines[i].startswith("'''") and (i > end):
            for j in range(i + 1, len(lines)):
                if lines[j].startswith("'''"):
                    comment_line += (j - i + 1)
                    end = j
    print('文件:{}\n代码行:{}\n空行:{}\n注释行:{}\n'.format(value,code_line, blank_line, comment_line))

 

 main():

def main(opts):
    for op, value in opts:  # op为选项串,value为附加参数
        try:
            if op == "-c":  # 返回字符数
                count_char(value)
            elif op == "-w":  # 返回词的数目
                count_word(value)
            elif op == "-l":  # 返回行数
                count_line(value)
            elif op == "-s":  # 递归处理目录下符合条件的文件
                recursion(value)
            elif op == "-a":  # 返回代码行,空行,注释行数
                more_data(value)
            elif op == "-h":
                print('-c file  返回文件 file 的字符数\n'
                      '-w file  返回文件 file 的词的数目\n'
                      '-l file  返回文件 file 的行数\n'
                      '-a file  返回空行代码行注释行数\n'
                      '-s -*[后缀]  递归相应后缀文件再执行基本指令')
                sys.exit()
        except FileNotFoundError as e:
            print("{}\n输入 -h 查看帮助".format(e))

 

 

 运行结果

 


 

过程中遇到的问题

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

'ISO-8859-1',问题解决。

项目小结
python 是当下比较流行的一种编译语言,学好python可以让一些让其他编译语言头疼的事变得轻松!

posted on 2018-09-11 23:42  MacRae  阅读(622)  评论(1编辑  收藏  举报