这个作业属于哪个课程 | |
---|---|
这个作业要求在哪里 | |
这个作业的目标 | |
学号 |
目录
-
1.PSP表格
-
2.解题思路
-
3.设计实现过程
-
4.代码说明
-
5.单元测试
-
6.代码规范链接
-
7.总结
一、PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 60 | 90 |
Estimate | 估计这个任务需要多少时间 | 240 | 300 |
Development | 开发 | 120 | 180 |
Analysis | 需求分析 (包括学习新技术) | 180 | 240 |
Design Spec | 生成设计文档 | 30 | 30 |
Design Review | 设计复审 | 20 | 60 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 15 | 30 |
Design | 具体设计 | 60 | 80 |
Coding | 具体编码 | 60 | 180 |
Code Review | 代码复审 | 30 | 40 |
Test | 测试(自我测试,修改代码,提交修改) | 30 | 60 |
Reporting | 报告 | 20 | 40 |
Test Report | 测试报告 | 20 | 60 |
Size Measurement | 计算工作量 | 15 | 15 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 30 | 30 |
合计 | 930 | 1435 |
二、解题思路
拿到题目阅读完之后完全看不懂, json 是什么都不知道,在舍友友好的帮助下,大概了解的题目的意思。题目要做的是 json 的解析。由于对 java 了解不多, Cpp 也忘了很多,参考代码也是 python ,所以决定选用 python 来编写程序。
三、设计实现过程
思路:题目的核心就是要解析 json 文件,所以要实现需要以下两个要求:
- 在文件夹中找到 json 文件,读取 json 文件
- 根据命令行参数对读取的 json 文件数据进行筛选,得出结果
四、代码说明
添加命令行参数
def __init__(self):
# 添加命令行参数
self.parser = argparse.ArgumentParser()
self.parser.add_argument('-i', '--init')
self.parser.add_argument('-u', '--user',type=str)
self.parser.add_argument('-r', '--repo',type=str)
self.parser.add_argument('-e', '--event',type=str)
self.next()
找到并读取 json 文件
def __init(self,dict_address):
user_event = {}
repo_event = {}
user_repo_event = {}
for root, dic, files in os.walk(dict_address):
# 筛选出后缀为 .json 的文件
for f in files:
if f[-5:] == ".json":
event = ["PushEvent","IssueCommentEvent","IssuesEvent","PullRequestEvent"]
json_path = f
x = open(dict_address + "/" + json_path, "r", encoding="UTF-8").readlines()
for i in x:
i = json.loads(i)
if i["type"] in event:
self.add_user_event(i, user_event)
self.add_repo_event(i, repo_event)
self.add_user_repo_event(i, user_repo_event)
# 将处理好的数据保存为其他 json 文件,以便于后续指令调用
with open("user_event.json", "a") as f:
json.dump(user_event,f)
with open("repo_event.json", "a") as f:
json.dump(repo_event,f)
with open("user_repo_event.json", "a") as f:
json.dump(user_repo_event, f)
统计事件的数量
def __init__(self):
# 添加命令行参数
self.parser = argparse.ArgumentParser()
self.parser.add_argument('-i', '--init')
self.parser.add_argument('-u', '--user',type=str)
self.parser.add_argument('-r', '--repo',type=str)
self.parser.add_argument('-e', '--event',type=str)
self.next()
# 根据接收到的参数来判断时哪种指令并返回指令要求的数据
def next(self):
args = self.parser.parse_args()
if args.init:
data = Data(args.init, 1)
elif args.user and args.event and not args.repo:
data = Data()
print(data.get_user_event(args.user, args.event))
elif args.repo and args.event and not args.user:
data = Data()
print(data.get_repo_event(args.repo, args.event))
elif args.user and args.repo and args.event:
data = Data()
print(data.get_user_repo_event(args.user, args.repo, args.event))
五、单元测试截图
性能测试
六、代码规范链接
https://github.com/longbaobao74/2020-personal-python/blob/master/README.md
七、总结
由于之前没学过python,看了题目就很懵。这次作业大部分时间也是花在学习python的一些基础上,在舍友的帮助下对 json 文件的读取、解析还是一知半解。
收获就是熟悉了python的基础语法和对github的基本操作。