zoukankan      html  css  js  c++  java
  • 软工实践第一次个人编程作业

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2020
    这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/SE2020
    这个作业的目标 学习解析json文件,分析数据,进一步学习github
    学号
    031802438
    使用语言
    python

    一. PSP 表格

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

    二.解题思路

    • 一开始没有思路,这题目是什么意思?json是什么?这文件里的数据是什么?但看到助教写的是python的示例代码,就赶紧去学python了。

    • 学完基本的语法之后,就去学习了怎样解析 Json 文件,怎样统计Json文件里的数据。

    • 开始写代码,边学边写,现学现卖,查找资料,了解 Python 如何解析 Json 文件,以及如何实现命令行参数。

    综上所述,我从头开始学习了python的基本语法和它的几个库,实现了解析json文件的功能。

    三.设计实现的过程

    • 首先要把json读取出来,按类型写入不同的文件中,查找的时候效率就比较高。

    • 接着就是按部就班的查找。

    四.核心代码

    首先是初始化函数,path为给定文件夹路径,通过os.path.splitext()函数可以得到一个由文件名和文件后缀组成的列表。

    除了这种方法还可以通过i的切片[-4:]是否与'json'相同来寻找json文件

    当函数结束时不要忘记关闭文件

    def Begin(path):
    	pe = open('PushEvent.json','w',encoding='utf-8')
    	ic = open('IssueCommentEven.json','w',encoding='utf-8')
    	ie = open('IssuesEvent.json','w',encoding='utf-8')
    	pr = open('PullRequestEvent.json','w',encoding='utf-8')
    	file = os.listdir(path)#得到文件列表
    	for i in file:
    		if (os.path.splitext(i)[1] == '.json'):#os.path.splitext(i)返回一个列表,首个元素为文件名。第二个元素为文件类型
    			with open(path+"//"+i, 'r', encoding='utf-8') as f:
    					for jsonstr in f.readlines(): #根据读到数据的不同将数据写入不同文件
    						date = json.loads(jsonstr)
    						if(date['type'] == 'PushEvent'):
    							pe.write(json.dumps(date))
    							pe.write('
    ')
    						elif(date['type']=='IssueCommentEvent'):
    							ic.write(json.dumps(date))
    							ic.write('
    ')
    						elif(date['type']=='IssuesEvent'):
    							ie.write(json.dumps(date))
    							ie.write('
    ')
    						elif(date['type']=='PullRequestEvent'):
    							pr.write(json.dumps(date))
    							pr.write('
    ')
    	pe.close()
    	ic.close()
    	ie.close()
    	pr.close()
    

    查找函数,因为在初始化函数中创建的类型数据文件与数据类型相同,所以查找时可以直接以event +.json的形式访问到该文件,值得注意的是测试程序初始化时输出0,为了保持一致我们也要在相应的情况输出0

    def FindNum(name,repo,event):   
    #根据命令行参数实现查找功能
    	num=0
    	if(name==' ' and repo!=' '):#项目名参数为空时
    		with open(event+'.json', 'r', encoding='utf-8') as f:
    				for jsonstr in f.readlines(): 
    					date = json.loads(jsonstr)
    					if(date['repo']['name']==repo):
    						num=num+1
    	elif(repo==' ' and name !=' '):#用户名名参数为空时
    		with open(event+'.json', 'r', encoding='utf-8') as f:
    				for jsonstr in f.readlines(): 
    					date = json.loads(jsonstr)
    					if(date['actor']['login']==name):
    						num=num+1
    	elif(repo!=' ' and name !=' '):#查询某项目中某用户某类型事件
    		with open(event+'.json', 'r', encoding='utf-8') as f:
    				for jsonstr in f.readlines(): 
    					date = json.loads(jsonstr)
    					if(date['actor']['login']==name and date['repo']['name']==repo):
    						num=num+1
    	#初始化输出0
    	
    	print(num)
    
    

    主函数:

    if __name__ == '__main__':
    	if('-i' in sys.argv):#根据命令行信息为参数赋值
    		Begin(sys.argv[sys.argv.index('-i')+1])
    	elif('--init' in sys.argv):
    		Begin(sys.argv[sys.argv.index('--init')+1])
    
    	if('-u' in sys.argv):
    		username = sys.argv[sys.argv.index('-u')+1]
    	elif('--user' in sys.argv):
    		username = sys.argv[sys.argv.index('--user')+1]
    	else:
    		username = ' '
    	if('-r' in sys.argv):
    		userepo = sys.argv[sys.argv.index('-r')+1]
    	elif('--repo' in sys.argv):
    		userepo = sys.argv[sys.argv.index('--repo')+1]
    	else:
    		userepo = ' '
    	if('-e' in sys.argv):
    		event=sys.argv[sys.argv.index('-e')+1]
    	elif('--event' in sys.argv):
    		username = sys.argv[sys.argv.index('--event')+1]
    	else:
    		event = ' '
    	FindNum(username,userepo,event)#调用函数findunm
    

    五.迭代过程

    优化了对json文件读取时的存放,将其分类,提高了查找效率。

    六.困难描述及解决办法寻找

    • 首先是对python的熟练度不够,在努力之下三天学完python的基本语法。

    • 其次是不了解json文件的处理方式,查找了很多资料后对json处理的规范有了一定的了解。

    • github,助教给的脚本,一开始都是不会用的,问了大佬才知道怎么用。

    七.代码规范

    https://github.com/LearninGggggg/LearninGggggg/blob/master/codestyle.md

    八.总结

    在这次实践中学到了很多东西,最重要的就是在python上基本入了门,同时也了解了一部分github的使用。

    从刚拿到作业时的懵逼,到现在有了对json文件处理的基本了解,并且对python的使用熟练度上升了,虽然码代码时很痛苦,但是写完之后很有成就感,期待下一次的软工作业。

  • 相关阅读:
    VS2015快捷键
    layui radio 监听
    jsvascript === 和==的区别
    bootstrap table checkbox 根据值选中、禁用等
    table 中 display为 block 时 tbody 失去宽度
    打包成Zip
    Server.MapPath()用法
    JS比较当前时间是否在指定时间段内
    从多张表获取数据,重组DataTable,根据重组路径,打包下载文件。
    checkbox 根据值选中
  • 原文地址:https://www.cnblogs.com/zjq031802438/p/13680970.html
Copyright © 2011-2022 走看看