关于2016年关于内蒙古高考录取信息的提取和处理
来源:互联网 发布:中国侵略日本 知乎 编辑:程序博客网 时间:2024/04/30 04:55
先占坑 晚上再写
神TM两个月之前的坑。
代码先放上来,等填完现在的这个坑再重构一下这个代码。
# -*- coding: utf-8 -*-import sqlite3#链接数据库conn=sqlite3.connect('test37.db')#打开文件f=open(r'E:\Python27\py\temp\all.txt','r')#数据库_建表conn.execute('''CREATE TABLE student ( id text PRIMARY KEY NOT NULL, name TEXT NOT NULL, sex text NOT NULL, nation text not null, school text, major text, chinese text , math text , synthesis text , english text , total0 text , total text );''')#变量初始化name='null'firstline=0#第一行 考生号确定schoolline=0#录取信息行确定scoreline=0#成绩代码行确定unadmited=0#没有被录取 1为未被录取 0为被录取item=0#每个考生的项目数 共有 基本信息+院校专业+各科成绩+总成绩 共4项count=0#存入数据库的有效数据个数 有效数据:非蒙古语文考生&&非单考单招考生spoken=0#判断是否有口语成绩 这影响到总成绩的确定mogo=-1#判断是否有蒙古语文 -1为没有 其他为有mogonum=0#统计蒙古语文人数noscorenum=0#统计没有成绩的人数(其他单考单招)#基本确定位置函数 其实只需要第一个和第三个参数 frontspace参数为所需内容位于该行的第几个空格后 lib为该行的字符串 此处为linedef findItem(frontspace,backspace,lib):# space=0 p1=0 p2=0 for space in range (frontspace): p1=lib.find(' ',p1+1)# print p1 for space in range (frontspace+1): p2=lib.find(' ',p2+1)# print p2 return lib[p1+1:p2]#数据存储 在最开始代替存入数据库的测试函数 把一个人的所有属性存入统一命名的变量def dataSave(num,name,sex,nation,school,major,chinese,math,synthesis,english,total0,total,count): print 'the '+count+' data is \n' print num+name+sex+nation+school+major+chinese+math+synthesis+english+total0+total+'\n'#确定性别 由于在姓名后有不确定数的空格 故用此函数确定性别#10/23更新:strip()方法可以解决这个问题def getSex(frontspace,lib):# space=0 p1=0 p2=0 p3=0 for space in range (frontspace): p1=lib.find(' ',p1+1) # print p1 p2=p1+1 while lib[p2]==' ': p2=p2+1 # print p2 p3=p2 while lib[p3+1]!=' ': p3=p3+1; # print p3 return lib[p2:p3+1]#院校和专业的提取 在后期调试的过程中几乎所有的问题都跟这个函数有关系 def schoolGet(frontspace,backspace,lib):# space=0 p1=0 p2=0 for space in range (frontspace): p1=lib.find(' ',p1+1) # print p1 for space in range (frontspace+1): p2=lib.find(' ',p2+1) # print p2 while lib[p1+1]<=chr(127): p1=p1+1 print str(name)+' schoolGet p1: '+str(p1) return lib[p1+1:p2]#民族确定 在性别之后def getNation(frontspace,lib):# space=0 p1=0 p2=0 p3=0 p4=0 for space in range (frontspace): p1=lib.find(' ',p1+1) # print p1 p2=p1+1 while lib[p2]==' ': p2=p2+1 # print p2 p3=p2 while lib[p3+1]!=' ': p3=p3+1; # print p3 p4=p3 while lib[p4+2]!=' ': p4=p4+1 # print p4 return lib[p3+2:p4+2]#主循环for line in f.readlines(): line=line.strip('\n')#去掉行尾的换行符 checkFirstLine=line.find('考生号')#得到第一行 也就是‘考生号’所在的行 也就是一个考生信息的第一行 if checkFirstLine==0:#---------------这种check变量是程序控制的关键变量 先找到所需数据的上一行 即数据的标题 它们是固定的 # 找到后将firstline置1 然后continue跳过此次循环进入下一循环 即进入下一行 当下一行检测到firstline为1时就开始在这一行查找并存储数据 # 存储后在将firstline 置0 表示这个人的这项数据已存储完毕 firstline=1#确定了 firstline置1后continue 进入下一行 即需要的数据 print '上一个人是'+str(name)+' 下一行是下一个人的姓名' continue if firstline==1: free=line.find('录取') free1=line.find('预录取') if free==-1 or free1!=-1:#如果没找到‘录取’ 或者找到了‘预录取’ 代表没有被录取 此时unadmited置1 school,major置空 unadmited=1 school='null' major='null' num=line[0:14]#考生号 从第一个开始 这个最简单 name=findItem(1,2,line)#姓名 print str(name) sex=getSex(3,line)#性别 nation=getNation(3,line)#民族 item=item+1#第一项完毕 item+1 firstline=0#firstline置0 为下个考生做准备 checkSchoolLine=line.find('录取层次') if mogo!=-1:#--------这个忘了 想起来再写 关于蒙古语文的 continue if checkSchoolLine==0:#录取层次获取 schoolline=1 continue if schoolline==1: noscore=line.find('其他单考单招') if noscore!=-1: noscore=-1#先将变量置-1 不然会影响到下一个人 unadmited=0 item=0 schoolline=0#以上3个变量全部置为初始值 noscorenum=noscorenum+1#单招计数 print '单招 item = '+str(item)+' unadmited = '+str(unadmited)+' noscore = '+str(noscore) # chinese='null' # math='null' # synthesis='null' # english='null' # total='null' # total0='null' #-----------原本想在这里把单招的人的分数全部置为Null 后来……嫌麻烦就直接把这个人扔了……反正都是专科的…… continue#执行下一循环 由于控制变量全部置为初始值 下面关于这个人的都无效 直到找到下一个人的考生号信息 就是不要这个人了 school=schoolGet(1,2,line)#学校获取 major=schoolGet(2,3,line)#专业 print '学校 = '+str(school) schoolline=0 item=item+1#第二项完毕 Item+1 checkScoreLine=line.find('成绩代码')#原理同上 if checkScoreLine==0: scoreline=1 continue if scoreline==1: mogo=line.find('蒙古语文')#判定蒙古语文 这里也出了好多问题 if mogo!=-1: item=0 scoreline=0#初始化控制变量 mogo=-1#置初始值 mogonum=mogonum+1#计数 unadmited=0#-------------这里出了很多问题 有种情况是这个人既是蒙古语文又没有被录取 unadmited变量就一直是1 导致后面的都存不进去 continue #成绩存储 chinese=findItem(2,3,line) math=findItem(5,6,line) synthesis=findItem(8,9,line) english=findItem(11,12,line) print '成绩 = '+str(chinese) scoreline=2 item=item+1 continue if scoreline==2: spoken=line.find('外语口语')#有无口语 关系到总成绩的位置 程序并没有存储口语成绩 if spoken!=-1: total0=findItem(8,9,line) total=findItem(11,12,line) else: total0=findItem(5,6,line) total=findItem(8,9,line) scoreline=0 item=item+1 print 'final item = '+str(item)+' unadmited = '+str(unadmited) if item+unadmited==4:#判断一个人的信息是否全部采集到 若录取了就是4项都有 item应为4 若未录取就是 item=3 unadmited=1 theNum=num#学号 theName=name#姓名 theSex=sex#性别 theNation=nation#民族 theSchool=school#录取院校 theMajor=major#录取专业 theChinese=chinese#语文 theMath=math#数学 theSynthesis=synthesis#综合 由于是按考生号排序的 文、理科可以直接在考生号上看出来 故在此没有加以区分 # 区分文理科方法 : 考生号第 10 位 理-> 5 文-> 1 theEnglish=english#英语 theTotal0=total0#总分0(其实原文档是总分一) 不含加分 即裸分、实考分 theTotal=total#总分 含各种加分 一般也是投档分(部分院校除外) count=count+1#成功存储 计数器+1 #save the data to database #这是在链接数据库之前模拟数据库的存储 为了测试数据的正确性 有一个print显示数据 dataSave(theNum,theName,theSex,theNation,theSchool,theMajor,theChinese,theMath,theSynthesis,theEnglish,theTotal0,theTotal,str(count)) #sql语句 sql="INSERT INTO student (id,name,sex,nation,school,major,chinese,math,synthesis,english,total0,total)\ VALUES ("+theNum+",\""+theName+"\",\""+theSex+"\",\""+theNation+"\",\""+theSchool+"\",\""+theMajor+"\",\""+theChinese+"\",\""+theMath+"\",\""+theSynthesis+"\",\""+theEnglish+"\",\""+theTotal0+"\",\""+theTotal+"\" )" print sql conn.execute(sql);#执行sql语句 conn.commit() print 'insert db success' firstline=0#第一行 考生号确定 schoolline=0#录取信息行确定 scoreline=0#成绩代码行确定 unadmited=0#没有被录取 1为未被录取 0为被录取 item=0#每个考生的项目数 共有 基本信息+院校专业+各科成绩+总成绩 共4项 # count=0#存入数据库的有效数据个数 有效数据:非蒙古语文考生&&非单考单招考生 # spoken=0#判断是否有口语成绩 这影响到总成绩的确定 mogo=-1#判断是否有蒙古语文 -1为没有 其他为有 # mogonum=0#统计蒙古语文人数 # noscorenum=0#统计没有成绩的人数(其他单考单招)#程序结束 统计有效数据个数print 'done\nthe number of data is '+str(count)##统计无效数据个数print '蒙古语考生 : '+str(mogonum)+' 单招考生 : '+str(noscorenum)#关闭数据库conn.close()#关闭源文档f.close()
好多东西要修改。
0 0
- 关于2016年关于内蒙古高考录取信息的提取和处理
- 高考信息:2007湖北高考分数和录取查询
- 2012年关于工作和学习的总结
- 那些年关于Focusable和clickable的坑,完美解决。
- 历年高考报考人数和录取人数
- 历年高考报考人数和录取人数
- 内蒙古:2014年起将执行新的高考加分政策
- 2013年关于博客更新的说明
- 2012年关于优秀工程师的思考
- 【那些年关于MyEclipse的快捷键大全】
- 高考录取分数线划定
- 高考录取分数线划定
- 1779 高考录取
- 高考模拟录取系统
- 2010年关于SNS和互联网一些你未必知道的事实
- 2010年关于SNS和互联网一些你未必知道的事实
- 高考被不喜欢的专业录取该怎么办?
- 关于信息安全专业的高考志愿选报
- ArcGIS教程:图形处理概述
- Swift中文教程(二十二) 泛型
- 知识点总结
- android 毕业设计项目开发 -登录界面
- Material Desing
- 关于2016年关于内蒙古高考录取信息的提取和处理
- 【Python】导入库numpy、pillow、scipy等问题汇总
- 图像局部特征(十二)--BRISK特征
- 我从编程总结的22个经验
- Swift中文教程(二十三) 高级运算符
- POJ 2236 Wireless Network
- JQuery中自定义data-*的使用
- Linux循环设备/dev/loop解析
- Android手机与vr交互暴风魔镜3D效果显示原理