陈志侠第二次作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/zjlg/rjjc
这个作业的目标 编写实现命令行计数统计文本程序
姓名-学号 陈志侠 2022329301009
码云地址 https://gitee.com/chen-zhixia666/second-assignment

一、项目简介及其相关的用法

1.1项目简介

本项目旨在利用PyCharm实现一个命令行文本计数统计程序,能正确统计导入的纯英文txt文本中的字符数,单词数,句子数。在拓展功能中,实现了统计代码行、空行、注释行、标点符号数、特定单词数等功能,用户可以通过命令行参数选择不同的统计功能,并指定要处理的文本文件。

1.2相关用法

具体命令行界面要求举例:
命令模式: wc.exe [参数] [文件名]

  • wc.exe -c file.txt 统计字符数
  • wc.exe -w file.txt 统计单词数
    扩展功能(加分项):统计代码行、空行、注释行等,并提供相应命令接口。

二、文件列表及其相关说明

2.1文件列表

不同版本号体现各个版本更迭

v0.1 空项目
v0.2 项目完成基础功能
v0.3 项目完成扩展功能(加分项)
点击查看v0.2代码
import sys
import re

def count_characters(text):
    return len(text) #字符数

def count_words(text):
    words = text.split()
    return len(words)   #单词数,以空格分割

def count_sentences(text):
    sentences = re.split(r'[.!?]', text)
    return len([s for s in sentences if s])   #句子数,以‘.’、‘!’、‘?’作为句子结束标志

def main():
    if len(sys.argv) != 3:  #检查命令行参数的数量是否正确
        print("笨蛋,正确用法是: python v0.2.py -c或-w或-s txt文件名")
        print("不同选择的意思是: -c (字符数), -w (单词数), -s (句子数)")
        sys.exit(1)

    option = sys.argv[1]
    filename = sys.argv[2]

    try:
        with open(filename, 'r') as file:
            text = file.read()
    except FileNotFoundError:  #如果文件不存在
        print(f"错误!!!!!这个文件居然不存在!!!")
        sys.exit(1)

    if option == "-c":
        num_characters = count_characters(text)
        print(f"字符数: {num_characters}")
    elif option == "-w":
        num_words = count_words(text)
        print(f"单词数: {num_words}")
    elif option == "-s":
        num_sentences = count_sentences(text)
        print(f"句子数: {num_sentences}")
    else:
        print("你的选择出错了,请使用-c或-w或-s")
        sys.exit(1)

if __name__ == "__main__":
    main()
点击查看v0.3代码
import sys
import re

def count_characters(text):
    return len(text) #字符数

def count_words(text):
    words = text.split()
    return len(words)   #单词数,以空格分割

def count_sentences(text):
    sentences = re.split(r'[.!?]', text)
    return len([s for s in sentences if s])   #句子数,以‘.’、‘!’、‘?’作为句子结束标志

def count_lines(text):
    return len(text.split('\n'))  #代码行数,用换行符进行分割

def count_empty_lines(text):
    return len([line for line in text.split('\n') if not line.strip()])   #空行数,过滤掉非空行

def count_comment_lines(text):
    return len([line for line in text.split('\n') if line.strip().startswith('#')]) #注释行数,以‘#’开头

def count_punctuation(text):
    punctuation = re.findall(r'[.,;:?!-]', text)
    return len(punctuation)  #标点符号数

def count_specific_word(text, word):
    words = re.findall(r'\b{}\b'.format(re.escape(word)), text)
    return len(words)  #特定单词数

def main():
    if len(sys.argv) < 3 or len(sys.argv) > 4:  #检查命令行参数的数量是否正确
        print("笨蛋,正确用法是: python v0.3.py -c或-w或-s或-e或-m或-a或-p txt文件名")
        print("不同选择的意思是: -c (字符数), -w (单词数), -s (句子数),-e(代码行数),-m(空行数),-a(注释行数),-p(标点符号数)")
        print("当你想要统计特定单词的出现数时,用法是:python v0.3.py -x txt文件名 [特定单词]")
        sys.exit(1)

    option = sys.argv[1]
    filename = sys.argv[2]
    specific_word = sys.argv[3] if len(sys.argv) == 4 else None  #获得特定单词(如果有)

    try:
        with open(filename, 'r') as file:
            text = file.read()
    except FileNotFoundError:  #如果文件不存在
        print(f"错误!!!!!这个文件居然不存在!!!")
        sys.exit(1)

    if option == "-c":
        num_characters = count_characters(text)
        print(f"字符数: {num_characters}")
    elif option == "-w":
        num_words = count_words(text)
        print(f"单词数: {num_words}")
    elif option == "-s":
        num_sentences = count_sentences(text)
        print(f"句子数: {num_sentences}")
    elif option == "-e":
        num_lines = count_lines(text)
        print(f"代码行数: {num_lines}")
    elif option == "-m":
        num_empty_lines = count_empty_lines(text)
        print(f"空行数: {num_empty_lines}")
    elif option == "-a":
        num_comment_lines = count_comment_lines(text)
        print(f"注释行数: {num_comment_lines}")
    elif option == "-p":
        num_punctuation = count_punctuation(text)
        print(f"标点符号数: {num_punctuation}")
    elif option == "-x":
        if specific_word is None:
            print("拜托,告诉我你想统计什么单词好吗")
            sys.exit(1)
        num_specific_word = count_specific_word(text, specific_word)
        print(f"'{specific_word}' 出现的次数: {num_specific_word}")
    else:
        print("你的选择出错了,请使用-c或-w或-s或-e或-m或-a或-p或-x")
        sys.exit(1)

if __name__ == "__main__":
    main()

2.2程序说明

2.2.1函数说明

(1) count_characters(text):

  • 功能: 计算并返回文本中的字符数。
  • 参数: text (str): 输入的文本字符串。
  • 返回值: 整数,表示字符数。

(2) count_specific_word(text, word):

  • 功能: 计算并返回文本中特定单词的出现次数。单词匹配是区分大小写的,并且要求整个单词匹配(即不是部分匹配)。
  • 参数:
    • text (str): 输入的文本字符串。
    • word (str): 要统计的特定单词。
  • 返回值: 整数,表示特定单词出现的次数。

其他count函数功能类似,在此不一一阐述。
(3)main():

  • 功能: 主函数,处理命令行参数(-c、-w、-s、-e等)并调用相应的统计函数。
  • 参数: 无直接参数,但通过命令行传递。
  • 返回值: 无直接返回值,但会打印统计结果或错误信息。

2.2.2参数说明

  • -c: 统计字符数。
  • -w: 统计单词数。
  • -s: 统计句子数。
  • -e: 统计代码行数。
  • -m : 统计空行数。
  • -a : 统计注释行数。
  • -p : 统计标点符号数。
  • -x : 统计特定单词的出现次数。

三、例程运行及其相关结果

3.1.例程准备

在运行前准备好纯英文txt文件,使其满足具有字符、句子、注释行的要求。

3.2例程运行流程

  1. 检查命令行参数

    • 程序首先检查命令行参数的数量是否正确(3个或4个)。
    • 如果参数数量不正确,会打印错误信息并退出。
  2. 读取文件内容

    • 根据用户提供的文件名,尝试打开并读取文件内容。
    • 如果文件不存在,会打印错误信息并退出。
  3. 根据选项执行相应的统计函数

    • 根据用户选择的选项(如 -c-w-s 等),调用相应的统计函数。
    • 每个统计函数都会处理文件内容并返回结果。
  4. 输出结果

    • 将统计结果打印到控制台。

3.3运行结果

3.3.1 v0.2.py运行结果

3.3.2 v0.3.py运行结果


四、总结

4.1 收获

  • 掌握了字符串处理方法和正则表达式的应用。
  • 学会了如何处理命令行参数。
  • 提升了代码的组织和调试能力。

4.2 改进空间

  • 可以增加更多的统计功能,如统计不同类型单词的数量等。
  • 可以优化性能,特别是对于大文件的处理。
  • 可以添加更多的错误处理机制,以提高程序的健壮性。

通过本次实验,让我对python这个软件更加深入了解了,并且在其中收获快乐,这是一次非常棒的体验:)

posted @ 2024-10-29 12:55  陈志侠  阅读(4)  评论(0编辑  收藏  举报