1.Github项目地址:
https://github.com/Vigor-creat/WC.git
2.PSP
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
Planning | 计划 | ||
· Estimate | · 估计这个任务需要多少时间 | 15 | 15 |
Development | 开发 | ||
· Analysis | · 需求分析 (包括学习新技术) | 120 | 140 |
· Design Spec | · 生成设计文档 | 30 | 20 |
· Design Review | · 设计复审 (和同事审核设计文档) | 20 | 20 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 20 | 20 |
· Design | · 具体设计 | 50 | 70 |
· Coding | · 具体编码 | 120 | 155 |
· Code Review | · 代码复审 | 20 | 25 |
· Test | · 测试(自我测试,修改代码,提交修改) | 40 | 55 |
Reporting | 报告 | ||
· Test Report | · 测试报告 | 40 | 30 |
· Size Measurement | · 计算工作量 | 30 | 20 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 30 | 20 |
合计 | 535 | 590 |
3.解题思路描述
使用的编程语言:python
功能实现思路:3个基本功能的共同点在于读取文件,先实现读取目标文件再进行各自基本功能的实现。扩展功能-s在于如何判断递归调用是否至底层,并且同一底层级多个文件该如何循环执行目标功能。
4.设计实现过程
功能-c函数:Character_count(file_path)
功能-w函数:Word_count(file_path)
功能-l函数:Line_count(file_path)
功能-s函数:get_file_path(dir_name)、get_file_name(dir_name)
调用-s函数获得各个文件地址后再将地址传给-c、-w、-l函数,实现相应的功能
5.代码说明
1 #!/usr/bin/env python3 2 # -*- coding: utf-8 -*- 3 import re 4 import os 5 6 7 #基本功能 8 9 # 功能c 10 def Character_count(file_path): # 统计字符数 11 12 file = open(file_path, 'r', encoding='utf-8') 13 14 character_count = str(len(file.read())) #file.read()将文件全部数据作为字符串返回,包括换行符。 15 16 return character_count 17 18 19 20 #功能w 21 def Word_count(file_path): # 统计单词数 22 23 with open(file_path, 'r', encoding = 'utf-8') as f: 24 25 flie_dict = {} # 读取文件后得到一个可迭代对象file_dict。 26 27 word_count = 0 28 29 for line in f.readlines(): 30 31 array_match = re.findall('[a-zA-Z]+', line) # 正则表达式re.findall作用返回line中的字符串,并组成一个新的数组。 32 33 word_count = len(array_match) + word_count # 将每一行构建的数组的元素值累加。 34 35 return word_count 36 37 38 39 #功能l 40 def Line_count(file_path): # 统计行数 41 42 file = open(file_path, 'r', encoding = 'utf-8') # r只读,w可写,a追加。 43 44 lines = len(file.readlines()) # file.readlines()读取文件所有内容,按行为单位放到一个列表中,返回list类型。 45 46 return lines 47 48 49 #扩展功能 50 51 #功能s 52 def get_file_path(dir_name): # 获取测试文件夹下所有文件地址 53 54 list_path = [] # 创建一个地址列表存储测试文件夹下所有文件地址 55 56 for root, dirs, files in os.walk(dir_name): 57 58 for file in files: 59 60 path = os.path.join(root, file) 61 62 list_path.append(path) # list_path.append()函数用于添加列表元素 63 64 return list_path 65 66 def get_file_name(dir_name): 67 68 list_file_name = [] # 创建一个文件名列表存储测试文件夹下所有文件对应的文件名 69 70 for root, dirs, files in os.walk(dir_name): 71 72 for file in files: 73 74 list_file_name.append(file) 75 76 return list_file_name 77 78 79 if __name__ == "__main__": #主函数 80 81 dir_path = input('请输入文件夹路径:') 82 83 list_path = get_file_path(dir_path) 84 85 list_file_name = get_file_name(dir_path) 86 87 for i in range(len(list_path)): 88 89 print('文件%s中的字符数:%s' % (list_file_name[i], Character_count(list_path[i]))) 90 91 print('文件%s中的单词数:%d' % (list_file_name[i], Word_count(list_path[i]))) 92 93 print('文件%s中的行数:%d\n' % (list_file_name[i], Line_count(list_path[i])))
6.测试运行
测试文件夹内文件目录:
测试结果:
7.项目小结
由于只是初步学习python语言,很多内置函数的功能和使用方法并没有掌握,导致在编写代码时出现大量的错误,需要重新搜索相关知识点,学习如何使用,导致花费了大量的时间。除此之外,对于python语言,仍存在相当多的知识盲区,暂时无法解决拓展功能-a以及高级功能。