软件工程第二次作业
这个作业属于哪个课程 | http://dwz.date/cts4 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/fzu/SE2020/homework/11167 |
这个作业的目标 | 进一步熟悉GitHub、git的使用,尝试大数据的处理 |
学号 | 031802225 |
一、psp 表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 20 | 30 |
Estimate | 估计这个任务需要多少时间 | 10 | |
Development | 开发 | 560 | 600+ |
Analysis | 需求分析 (包括学习新技术) | 240 | |
Design Spec | 生成设计文档 | 30 | 60 |
Design Review | 设计复审 | 30 | |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 60 | |
Design | 具体设计 | 60 | |
Coding | 具体编码 | 240 | |
Code Review | 代码复审 | 60 | |
Test | 测试(自我测试,修改代码,提交修改) | 120 | |
Reporting | 报告 | 120 | |
Test Report | 测试报告 | 60 | |
Size Measurement | 计算工作量 | 20 | |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 30 | |
合计 | 1690 |
二、纯小白摸爬过程
1.前置要求:
1 Git、GitHub 的使用:在 pycharm 中自动配置。
具体学习过程见另一篇博文:(还在写,还没更,日后写了补充链接~)
2 代码规范的制定:https://github.com/qtzj/soft_homework_2020917/blob/master/codestyle.md
2.需求分析与新知识学习:大数据处理,json文件的解析
json:是用了存储和交换文本信息的语法,一种轻量级的数据交换格式。
解析json: 解析数据内容,即吧字符串重新变成json类型对象,使得可对其中各种类型的属性或者对象进行操作。
参考链接:https://www.runoob.com/python/python-json.html
命令行参数:命令行中的参数。接受对象为main()函数,一个程序开始于对函数main()的调用,此时有两个参数被送给main(),其中的一个描述了命令行参数的个数,通常称为argc;另一个是命令行参数的数组,通常称为argv。
参考链接:python中处理命令行参数的方法 https://segmentfault.com/a/1190000023956528
命令行解析:可以使我们在命令行中就可以向程序中传入参数并让程序运行。
3 python解析json文件
1 open(name[, mode[, buffering]]):用于打开文件,本次作业中用于打开json文件。
参考链接: https://www.runoob.com/python/python-func-open.html
2 python类中初始化的形式:def_init_(self, 参数1,参数2,···,参数n)
参考链接: https://blog.csdn.net/qq_26005373/article/details/99942134
3 json.dumps : 将 Python 对象编码成 JSON 字符串。
4 json.loads : 将已编码的JSON字符串解码为python对象。
4 python中命令行参数的获取与解析
获取命令行参数的三种方式:
参考链接:https://www.runoob.com/python/python-command-line-arguments.html
鉴于本次作业的格式分析,选择使用 argparse 模块。
argparse 模块
使用步骤:
1.import argparse #导入该模块
2.parser = argparse.ArgumentParser() #然后创建一个解析对象
3.parser.add_argument() #向该对象中添加命令行参数和选项
4.parser.parse_args() #用于解析,解析成功后可以使用,将之前add_argument()定义的参数进行赋值,并返回相关的namespace
add_argument() 常用的参数:
name or flags
:命令行参数名或者选项。但是如果是选项的话,则设置为None
nargs
:命令行参数的个数,一般使用通配符表示,其中,?
表示只用一个,*
表示0到多个,+
表示至少一个
dest
:如果提供dest,例如dest=”a”,那么可以通过args.a访问该参数
default
:设置参数的默认值
version
:打印程序版本信息
type
:把从命令行输入的结果转成设置的类型
help
:参数命令的介绍,帮助我们输入参数命令
本题中代码解释举例:
题目格式要求
python3 GHAnalysis.py <-u|--user> user <-e|--event> <PushEvent|IssueCommentEvent|IssuesEvent|PullRequestEvent>
代码:
my_parser.add_argument('-u', '--user', help='username')
设置参数名'-u','args.--user'可以访问参数,help参数则是引导用户输入的参数命令介绍。
参考链接:https://zhuanlan.zhihu.com/p/56922793
https://blog.csdn.net/haoyu_/article/details/79223896
三、思路分析
- 阅读json文件,以便后续编码
得到“key-value"如下:
{"id":"2489651045",
"type":"CreateEvent",
"actor":{"id":665991,"login":"petroav","gravatar_id":"","url":"https://api.github.com/users/petroav","avatar_url":"https://avatars.githubusercontent.com/u/665991?"},
"repo":{"id":28688495,"name":"petroav/6.828","url":"https://api.github.com/repos/petroav/6.828"},
"payload":{"ref":"master","ref_type":"branch","master_branch":"master","description":"Solution to homework and assignments from MIT's 6.828 (Operating Systems Engineering). Done in my spare time.","pusher_type":"user"},
"public":true,"created_at":"2015-01-01T15:00:00Z"}
- 具体思路:
四、部分代码说明和展示
#命令行参数的设置
def set_command():#命令行参数的设置(-i为初始化,-u为用户,-r为项目,-e为事件)
self_parser = argparse.ArgumentParser(description='analysis the json file')
self_parser.add_argument('-i', '--init', help='json path')
self_parser.add_argument('-u', '--user', help='username')
self_parser.add_argument('-r', '--repo', help='repository name')
self_parser.add_argument('-e', '--event', help='type of event')
#命令行参数的解析
args = self_parser.parse_args()#命令行参数的解析
# 解析json的过程python3 GHAnalysis.py <--init|-i> <path to data>
class json_data:
def __init__(self, dict_address: int = None, reload: int = 0):
if reload == 1:
self.__init(dict_address)
x = open('F:homework_information2015-01-01-15.json', 'r', encoding='utf-8').read() #打开json文件
self.__4Events4PerP = json.loads(x) # 解析json
# 数据处理,用是否存在来判断
def count(data,username,repo,event):
answer=0
for da in data:
if not len(username) == 0: # 存在用户
if not username == da['actor']['login']: #用户不在文件中跳出循环
continue
else:
pass
else:
pass
if not len(repo) == 0: # 存在项目
if not repo == da['repo']['name']: #项目不在文件中跳出循环
continue
else:
pass
else:
pass
#判断项目
if da['type']==event:
answer=answer+1
else:
pass
return answer
目前没跑出来:
目前再改bug!!!!日后更结果~
性能测试截图
目前绝对有问题,我先把部分代码删掉,让他跑一下。但是只能先截图了
GitHub中建了两个库,和代码规范那个库分开了,本次作业见:https://github.com/qtzj/031802225
我的代码规范
https://github.com/qtzj/soft_homework_2020917/blob/master/codestyle.md
感觉自己的代码风格还没有完全形成起来,后续会不断更新与改进~
计划与困难
此处不断增加,也不断减少~
1.听说json文件要逐行解析,啊这,我再改。
2 听说要用多线程,啊这,我再改。
心得总结(作业日记,流水账记录,可自动跳过)
9.15
惨兮兮的我熬夜三天肝完数学建模,14日昏沉一天,15日打开作业发现自己连需求都不是很看得懂,简直是致命打击。这,慢慢学吧,后续会更的。恳请助教大发慈悲,给我点时间慢慢更吧~
9 .16
周三是从早上8:20满课到8:30,然后又继续开会。熬夜看了一下资料。尝试解决部分问题。最大的收获是学会冷静,淡定,然后努力。
先交为敬!日后更新!
9.17
今天学习了一下GitHub,这个东西我接触得挺早的,但是一直都没怎么用,很多操作都不熟悉,虽然看了一部分,但是现在还是觉得很生涩。自己之前胡乱开发,总是用qq传文件,确实没有培养好的习惯,现在好好改吧。接着我简单制定了自己的代码规范,自己感觉平时做事情不是很仔细,代码规范一直不是很好,希望以后慢慢改进。接着看了python命令行参数解析。
最近数学建模国赛+补作业连续通宵熬夜,,有点顶不住,休息一阵,会更的,会更的,作业截止我也更。