软工实践第一次个人编程作业

正文

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2020
这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/SE2020/homework/11167
这个作业的目标 <熟练使用github,学会用python处理json文件数据。规范代码>
学号 031802320
语言 python

psp表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 30 40
Estimate 估计这个任务需要多少时间 10 10
Development 开发
Analysis 需求分析 (包括学习新技术) 60 60
Design Spec 生成设计文档 15
Design Review 设计复审 10
Coding Standard 代码规范 (为目前的开发制定合适的规范) 10 10
Design 具体设计 40 40
Coding 具体编码 500
Code Review 代码复审 100
Test 测试(自我测试,修改代码,提交修改) 100
Reporting 报告 60
Test Report 测试报告 60
Size Measurement 计算工作量 60
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 30
合计

解题思路

用python解析处理json文件,获取数据,解析出单个用户的行为信息,再去用函数查询每个事件的数量

设计过程

命令行参数的解析、Json文件的读取,数据分析处理依次完成代码
查阅博客了解python各种参数设置,函数
设计真正符合题意的函数
在学了

有用的部分代码说明

读取json按行分解并解析

def read1(self):
    self.dicts = []
    for root, dirs, files in os.walk(self.dir_addr):
        for file in files:
            if file[-5:] == '.json' and file[-6:] != '1.json' and file[-6:] != '2.json' and file[-6:] != '3.json':
                with open(file, 'r', encoding='utf-8') as f:
                    self.jsons = [x for x in f.read().split('\n') if len(x)>0]#按行分割
                    for self.json in self.__jsons:
                        self.dicts.append(json.loads(self.json))

命令行参数设置

def run():#命令行参数的设置(-i为初始化,-u为用户,-r为项目,-e为事件)
    parser = argparse.ArgumentParser()
    parser.add_argument('-i', '--init', help='json file path')
    parser.add_argument('-u', '--user', help='username')
    parser.add_argument('-r', '--repo', help='repository name')
    parser.add_argument('-e', '--event', help='type of event')

处理数据得到结果getnum()

def getnum(jsdata_list, user, event, repo):
    '计算数量'
    num = 0
    i = 0
    for jsdata in jsdata_list:
        if len(user) != 0 and len(repo) == 0:
            if user == jsdata['actor']['login'] and jsdata['type'] == event:
                num += 1
            else:
                pass
        elif len(user) == 0 and len(repo) != 0:
            if repo == jsdata['repo']['name'] and jsdata['type'] == event:
                num += 1
            else:
                pass
        elif len(user) != 0 and len(repo) != 0:
            if repo == jsdata['repo']['name'] and jsdata['type'] == event and user == jsdata['actor']['login']:
                num += 1
            else:
                pass
    print(num)

单元测试截图描述

借用别人代码进行的单元测试

代码规范链接

https://github.com/supernooob/2020-personal-python/blob/master/codestyle.md

总结

不会,不是我能独立完成的作业
向别人了解学习了基本的文本数据处理框架
认识到自己的学习能力,应该花更多时间实践,要真正深刻地掌握一门语言才行

posted @ 2020-09-16 23:43  supernooob  阅读(168)  评论(0编辑  收藏  举报