软工个人项目wc.exe

WC 项目要求

wc.exe 是一个常见的工具,它能统计文本文件的字符数、单词数和行数。这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数、单词数和行数。

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

wc.exe [parameter] [file_name]
下面是利用Python写出来的代码:

#!/usr/bin/env python
# -- coding: utf-8 --
# @Time    : 2020-3-15 09:24
# @Author  : Lintao
# @mail    : 1595813308@qq.com
# @File    : WC.exe.py
import os
import string
import re
'''
实现一个统计程序,
它能正确统计程序文件中的字符数、单词数、行数,
以及还具备其他扩展功能,
并能够快速地处理多个文件。
'''

def get_lines(file_path):
    count = 0
    f = open(file_path, 'r', encoding='utf-8')
    for line in f.readlines():
        count = count + 1
    f.close()
    return count


def get_chars(file_path):
    f = open(file_path, 'r',encoding="UTF-8")
    count = sum([len(word) for line in f for word in line.split()])
    f.close()
    return count


def get_words(file_path):
    f = open(file_path,'r', encoding="UTF-8")
    count = len(re.split(r'[^a-zA-Z]+', f.read())) - 1
    f.close()
    return count;


def get_other(file_path):
    code_line = 0
    none_line = 0
    tip_line = 0
    f = open(file_path, 'r', encoding='utf-8')
    for line in f.readlines():
        if not line.split():
            none_line = none_line + 1
            continue
        elif (line[0:2] == '//'):
            tip_line = tip_line + 1
            continue
        code_line = code_line + 1

    f.close()
    return [code_line, none_line, tip_line]


def get_help():
    print("程序处理用户需求的模式为:wc.exe [parameter] [file_name]")
    print("wc.exe -c file.c     //返回文件 file.c 的字符数\nwc.exe -w file.c    //返回文件 file.c 的词的数目\nwc.exe -l file.c      //返回文件 file.c 的行数\n")
    print("扩展功能:\n-s   递归处理目录下符合条件的文件。\n-a   返回更复杂的数据(代码行 / 空行 / 注释行)。\n")



if __name__ == '__main__':
    Input = input("请输入命令(命令说明可以查找wc.exe -h):")
    Ipt = Input.split()
    if Ipt[0] == 'wc.exe':
        if Ipt[1] == '-h':
            get_help()
        if len(Ipt) == 3:
            if Ipt[1] == '-c':
                count = get_chars(Ipt[-1])
                print("代码行数为:", count)
            elif Ipt[1] == '-w':
                count = get_words(Ipt[-1])
                print("代码单词为:", count)
            elif Ipt[1] == '-l':
                count = get_lines(Ipt[-1])
                print("代码行数为:", count)
            elif Ipt[1] == '-a':
                tru = get_other(Ipt[-1])
                print("代码行数为:", tru[0])
                print("空行数为:", tru[1])
                print("注释行数为:", tru[2])
            else:
                print("Error")
        if len(Ipt) == 4:
            files = os.listdir(Ipt[-1])
            if Ipt[1] == '-s':
                if Ipt[2] == '-c':
                    char_sums = 0;
                    for file in files:
                        if file[(len(file) - 2):len(file)] == ".c":
                            f = Ipt[-1] + '/' + file
                            char_sum = get_chars(f)
                            char_sums += char_sum
                    print("这个目录下的文件的字符数:",char_sums)
                elif Ipt[2] == '-w':
                    word_sums = 0;
                    for file in files:
                        if file[(len(file) - 2):len(file)] == ".c":
                            f = Ipt[-1] + '/' + file
                            word_sum = get_words(f)
                            word_sums += word_sum
                    print("这个目录下的文件的单词数:" ,word_sums)
                elif Ipt[2] == '-l':
                    line_sums = 0;
                    for file in files:
                        if file[(len(file) - 2):len(file)] == ".c":
                            f = Ipt[-1] + '/' + file
                            line_sum = get_lines(f)
                            line_sums += line_sum
                    print("这个目录下的文件的行数:",line_sums)
                elif Ipt[2] == '-a':
                    other_sums = [0,0,0];
                    for file in files:
                        if file[(len(file) - 2):len(file)] == ".c":
                            f = Ipt[-1] + '/' + file
                            other_sum = get_other(f)
                            other_sums[0] += other_sum[0]
                            other_sums[1] += other_sum[1]
                            other_sums[2] += other_sum[2]
                    print("代码行数为:", other_sums[0])
                    print("空行数为:", other_sums[1])
                    print("注释行数为:", other_sums[2])
                else:
                    print("Error")
            if Ipt[2] == '-s':
                if Ipt[1] == '-c':
                    char_sums = 0;
                    for file in files:
                        if file[(len(file) - 2):len(file)] == ".c":
                            f = Ipt[-1] + '/' + file
                            char_sum = get_chars(f)
                            char_sums += char_sum
                    print("这个目录下的文件的字符数:",char_sums)
                elif Ipt[1] == '-w':
                    word_sums = 0;
                    for file in files:
                        if file[(len(file) - 2):len(file)] == ".c":
                            f = Ipt[-1] + '/' + file
                            word_sum = get_words(f)
                            word_sums += word_sum
                    print("这个目录下的文件的单词数:" ,word_sums)
                elif Ipt[1] == '-l':
                    line_sums = 0;
                    for file in files:
                        if file[(len(file) - 2):len(file)] == ".c":
                            f = Ipt[-1] + '/' + file
                            line_sum = get_lines(f)
                            line_sums += line_sum
                    print("这个目录下的文件的行数:",line_sums)
                elif Ipt[1] == '-a':
                    other_sums = [0,0,0];
                    for file in files:
                        if file[(len(file) - 2):len(file)] == ".c":
                            f = Ipt[-1] + '/' + file
                            other_sum = get_other(f)
                            other_sums[0] += other_sum[0]
                            other_sums[1] += other_sum[1]
                            other_sums[2] += other_sum[2]
                    print("代码行数为:", other_sums[0])
                    print("空行数为:", other_sums[1])
                    print("注释行数为:", other_sums[2])
                else:
                    print("Error")
    else:
        print("Error")
    input("Press any key to exit...")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值