这个作业属于哪个课程 | https://edu.cnblogs.com/campus/fzu/SE2020 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/fzu/SE2020/homework/11167 |
这个作业的目标 | GitHub的使用,对json文件的解析及处理 |
学号 | 031802608 |
一、PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 60 | |
Estimate | 估计这个任务需要多少时间 | 200 | |
Development | 开发 | 100 | |
Analysis | 需求分析 (包括学习新技术) | 300 | 600(时间还在不断上升) |
Design Spec | 生成设计文档 | 20 | |
Design Review | 设计复审 | 15 | |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 10 | |
Design | 具体设计 | 60 | |
Coding | 具体编码 | 30 | |
Code Review | 代码复审 | 50 | |
Test | 测试(自我测试,修改代码,提交修改) | 20 | |
Reporting | 报告 | 20 | |
Test Report | 测试报告 | 15 | |
Size Measurement | 计算工作量 | 3 | |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 10 | |
合计 | 913 |
二、解题思路
我是谁,我在哪,我要干嘛。看完题目不知道我该怎么下手,示例给的是python...直到示例数据出来,我才知道是要让我们处理json文件。emmm,从来没有接触过的东西。在经过两天百度c语言处理json文件的方法,使用jsoncpp头文件能处理json文件,但好像这次作业还是力不从心,最后give up(???)。想用python吧,但是我还没做过跟python有关的任何编程(???)。
截止保存,明白了python遍历文件夹、打开json文件的函数
9/17
通过不断翻看同学代码,慢慢理解,终于把部分代码打出来了 ..
还差参数指令没太明白
https://mp.weixin.qq.com/s?src=11×tamp=1600346553&ver=2590&signature=UfxUhe3yoD9IbxfDJp58mCg2StHCceHGSrGydzlChRKQ-EYWavTKFy6C467vvRE927svGFYS9G9aDBx8WgNhT2DQqop7voAiMTHmCc5GxdsAvE3wQCGWha6fh6BLCb&new=1
三、设计实现过程
emmm,还是先学会python再来balabala吧...
目前为止能写出的东西...
在面向同学设计之后,通过阅读代码,理解之后,多出了一些东西
def _init(self, Address):
user_event = {}
repo_event = {}
user_repo_event = {}
for root, dic, files in os.walk(Address):
# 遍历文件夹
for f in files:
if f[-5:] == '.json':
event = ["PushEvent", "IssueCommentEvent", "IssuesEvent", "PullRequestEvent"]
json_path = f
x = open(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)
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 add_user_event(self, i, user_event):
id = i["actor"]["login"]
event = i["type"]
if id not in user_event:
#如果此ID未出现过,就建立新数据
user_event[id] = {"PushEvent":0,"IssueCommentEvent":0,"IssuesEvent":0,"PullRequestEvent":0}
user_event[id][event] +=1
def add_repo_event(self, i, repo_event):
repo = i["repo"]["name"]
event = i["type"]
if repo not in repo_event:
repo_event[repo] = {"PushEvent":0,"IssueCommentEvent":0,"IssuesEvent":0,"PullRequestEvent":0}
repo_event[repo][event] += 1
def add_user_repo_event(self, i, user_repo_event):
id = i["actor"]["login"]
event = i["type"]
repo = i["repo"]["name"]
if id not in user_repo_event:
user_repo_event[id] = {}
user_repo_event[id][repo] = {"PushEvent":0,"IssueCommentEvent":0,"IssuesEvent":0,"PullRequestEvent":0}
if repo not in user_repo_event:
user_repo_event[id][repo] = {"PushEvent":0,"IssueCommentEvent":0,"IssuesEvent":0,"PullRequestEvent":0}
user_repo_event[id][repo][event] +=1
#对数据进行处理和分析,制作三个json分别存储user_event,repo_event,user_repo_event
def get_user_event(self, user, event):
x = open("user_event.json", "r", encoding="utf-8").read()
data = json.loads(x)
return data[user][event]
def get_repo_event(self, repo, event):
x = open("repo_event.json", "r", encoding="utf-8").read()
data = json.loads(x)
return data[repo][event]
def get_user_repo_event(self,user, repo, event):
x = open("user_repo_event.json", "r", encoding="utf-8").read()
data =json.loads(x)
return data[user][repo][event]
通过同学代码和裕哥代码的理解,终于把class run给弄明白了 ...
def __init__(self):
self.parser = argparse.ArgumentParser()
self.data = None
self.argInit()
print(self.analyse())
def argInit(self):
self.parser.add_argument('-i', '--init')
self.parser.add_argument('-u', '--user')
self.parser.add_argument('-r', '--repo')
self.parser.add_argument('-e', '--event')
def analyse(self):
if self.parser.parse_args().init:
self.data = Data(self.parser.parse_args().init, 1)
return 0
else:
if self.data is None:
self.data = Data()
elif self.parser.parse_args().user and self.parser.parse_args().event and not self.parser.parse_args().repo:
res = self.data.get_user_event(self.parser.parse_args().user, self.parser.parse_args().event)
elif self.parser.parse_args().repo and self.parser.parse_args().event and not self.parser.parse_args().user:
res = self.data.get_repo_event(self.parser.parse_args().repo, self.parser.parse_args().event)
elif self.parser.parse_args().user and self.parser.parse_args().event and self.parser.parse_args().repo:
res = self.data.get_user_repo_event(self.parser.parse_args().user, self.parser.parse_args().repo, self.parser.parse_args().event)
return res
emm 用上面的方法报错 初始化失败... ...但是我不知道问题是什么 ...所以沿用了同学的代码
def analyse(self):
if self.parser.parse_args().init:
self.data = Data(self.parser.parse_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/wysnzzzz/2020-personal-python/blob/master/codestyle
八、总结
自闭....还是太菜了....加油学习python....尽早写出代码 QAQ
先交了保个命?
磕磕绊绊终于是写出了代码 ...