这个作业属于哪个课程 | https://edu.cnblogs.com/campus/fzu/SE2020 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/fzu/SE2020/homework/11167 |
这个作业的目标 | 学会Github的基本操作;读取Json文件,并进行相关操作 |
学号 | 031802642 |
时间预算
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 200 | 200 |
Estimate | 估计这个任务需要多少时间 | 200 | 200 |
Development | 开发 | ||
Analysis | 需求分析 (包括学习新技术) | 150 | 300 |
Design Spec | 生成设计文档 | 60 | 60 |
Design Review | 设计复审 | 0 | 0 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 20 | 20 |
Design | 具体设计 | 20 | 20 |
Coding | 具体编码 | 100 | 100 |
Code Review | 代码复审 | 0 | 0 |
Test | 测试(自我测试,修改代码,提交修改) | 50 | 50 |
Reporting | 报告 | 30 | 30 |
Test Report | 测试报告 | ||
Size Measurement | 计算工作量 | ||
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 30 | 30 |
合计 | 460 | 460 |
解题思路
- 反复阅读作业要求,还是读不懂
- 经大佬指导,先粗略学了python
- 利用python读取json文件,进行四项操作统计,实现命令行参数
- 利用脚本测试代码
- 将写完的代码提交到Github测试
1.学习python
利用Bilibili这个学习软件,搜索python教程
然后跟着视频,构建环境,打打代码,骗自己说,我会了
2.利用python读取json文件
-
同学给推了一个教程:
-
看不懂之后,又找了另一个:
结合两者一起看,懂了一点点
其中有一段代码可以用于读取json文件
修改其中的参数即可
3.编写代码
3.1思路
3.2代码模块
学不会啊
以下代码均参考大佬的代码
初始化命令行
class DataProcessing:
def __init__(self,FirstTime: bool , Address: str = None ):
if(FirstTime):#第一次执行初始化
if(self.pretreatment(Address)==False):
raise RuntimeError('error: Files not Found')
else:#读取预制文件
if(self.loadData() == False):
raise RuntimeError('error: please -i before using ')
读取json文件,考虑多个文件,利用列表实现
def pretreatment(self,Address: str) -> bool:
self.__User = {}
self.__Repo = {}
self.__UserAndRepo ={}
findFile=False
for root, dic, files in os.walk(Address): #获取文件夹内所有文件
for file in files:
if file[-5:] == '.json': #筛选后缀为.json的文件
findFile=True
json_path = file
filedir = open(Address+'\'+json_path,
'r', encoding='utf-8')
while True: #对单个文件逐行读取
line = filedir.readline()
if line :
if line.strip() == '': # 如果读到的是空行
continue # 跳过该行
jsondata=json.loads(line)
if not jsondata["type"] in ['PushEvent', 'IssueCommentEvent', 'IssuesEvent', 'PullRequestEvent']: #筛选事件
continue # 跳过无关事件
self.addEvent(jsondata)# 统计事件数量
else:
break
filedir.close()
self.saveToFile() # 循环读取结束后保存到文件
return findFile
问题求解
def addEvent(self,jsondata):#事件统计
#emptyevent = {'PushEvent': 0, 'IssueCommentEvent': 0, 'IssuesEvent': 0,'PullRequestEvent': 0}
if not jsondata["actor"]["login"] in self.__User.keys():
self.__User[jsondata["actor"]["login"]] = {'PushEvent': 0, 'IssueCommentEvent': 0, 'IssuesEvent': 0,
'PullRequestEvent': 0}
if not jsondata["repo"]["name"] in self.__Repo.keys():
self.__Repo[jsondata["repo"]["name"]] = {'PushEvent': 0, 'IssueCommentEvent': 0, 'IssuesEvent': 0,
'PullRequestEvent': 0}
if not jsondata["actor"]["login"] in self.__UserAndRepo.keys():
self.__UserAndRepo[jsondata["actor"]["login"]] = {}
self.__UserAndRepo[jsondata["actor"]["login"]][jsondata["repo"]["name"]] ={'PushEvent': 0, 'IssueCommentEvent': 0, 'IssuesEvent': 0,
'PullRequestEvent': 0}
elif not jsondata["repo"]["name"] in self.__UserAndRepo[jsondata["actor"]["login"]].keys():
self.__UserAndRepo[jsondata["actor"]["login"]][jsondata["repo"]["name"]] = {'PushEvent': 0, 'IssueCommentEvent': 0, 'IssuesEvent': 0,
'PullRequestEvent': 0}
self.__User[jsondata["actor"]["login"]][jsondata['type']] += 1
self.__Repo[jsondata["repo"]["name"]][jsondata['type']] += 1
self.__UserAndRepo[jsondata["actor"]["login"]][jsondata["repo"]["name"]][jsondata['type']] += 1
结果输出
def dataResult(self):
#根据参数执行
if self.parser.parse_args().init:
self.data = DataProcessing( True,self.parser.parse_args().init)
return 0
else:
self.data = DataProcessing(False)
if self.parser.parse_args().event:
if self.parser.parse_args().user:
if self.parser.parse_args().repo:
result = self.data.getEventsByUsersAndRepos(
self.parser.parse_args().user, self.parser.parse_args().repo,
self.parser.parse_args().event)
else:
result = self.data.getEventsByUsers(
self.parser.parse_args().user, self.parser.parse_args().event)
elif self.parser.parse_args().repo:
result = self.data.getEventsByRepos(
self.parser.parse_args().repo, self.parser.parse_args().event)
else:
raise RuntimeError('error: argument -u or -r is required')
else:
raise RuntimeError('error: argument -e is required')
return result
单元测试
1.本地测试截图
样例
自主实现
Github测试
2.单元测试覆盖率优化和性能测试
代码规范
总结
- 不会的东西太多了,往后还需努力
- 学习了python,以及关于json文件的解析
- 学习了基本的git指令
- 网上资料很多,以后还得学会甄别信息
- 需要对时间进行规划