福州大学软件工程实践个人编程作业

这个作业属于哪个课程
https://edu.cnblogs.com/campus/fzu/SE2020
这个作业要求在哪里
https://edu.cnblogs.com/campus/fzu/SE2020
这个作业的目标
学习 GitHub 的使用、 arg 命令行参数格式解析、 json 解析、 规范编程习惯、性能优化分析
学号
031802507

目录

  • 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的基本操作。

posted @ 2020-09-16 23:46  jiajunO_0  阅读(185)  评论(1编辑  收藏  举报