▌01 相关的通知
▌02 信息处理
1.原始资料文件
-
资料所在目录:
-
E:\SmartCar\2020比赛\Document\HighEducation\Division Result
E:\SmartCar\2020比赛\Document\HighEducation\Final Result
E:\SmartCar\2020比赛\Document\HighEducation\输出表格-高教学会 : 包括有:竞赛报名模板、竞赛结果模板两个文件。
E:\SmartCar\2020比赛\Document\HighEducation\用户参赛信息表20201124.xlsx
总决赛获奖信息:
-
D:\Temp\Final Result\Excel\安徽.xls
D:\Temp\Final Result\Excel\创意.xls
D:\Temp\Final Result\Excel\东北.xls
D:\Temp\Final Result\Excel\华北.xls
D:\Temp\Final Result\Excel\华东.xls
D:\Temp\Final Result\Excel\华南.xlsx
D:\Temp\Final Result\Excel\山东.xls
D:\Temp\Final Result\Excel\西部.xls
D:\Temp\Final Result\Excel\浙江.xlsx
2.竞赛结果表格
-
(1)填表说明:
-
1.、奖项各竞赛自行设定,可含单项奖或专项奖。
2.、组织奖、优秀指导教师奖等可另行设定。
3.、组别:指研究生、本科、高职高专、中职、教师。
4、类别:有些竞赛有分类,如:广告设计竞赛的平面类、动画类等。
5、部分竞赛有作品编号、作品名称
(2)EXCEL表格栏目:
-
A. 作品编号; B. 作品名称; C. 学校名称; D. 学生1姓名; E. 学生2姓名
F. 学生3姓名; G. 学生4姓名; H. 学生5姓名; I. 学生6姓名; J. 学生7姓名
K. 学生8姓名; L. 队名; M. 专业名称; N. 学院名称; O. 指导老师1;
P. 指导老师2; Q. 奖项名称; R. 竞赛组别; S. 竞赛类别; T. 备注
3.总决赛表格→竞赛结果
(1) 编程分析
总决赛获奖信息表格结构如下:
▲ 总决赛表格结构
按照以下结构将总决赛获奖信息转换成“竞赛结果表格”
No | 总决赛表格 | 竞赛结果表格 | 备注 |
---|---|---|---|
1 | 学校名称 | N.学院名称 | |
2 | 队伍名称 | L.队名 | |
3 | 组别 | B.竞赛类别 | |
4 | 奖项 | Q.奖项名称 | 全国总决赛+奖项 |
5 | 指导教师1 | O.指导教师1 | |
6 | 指导教师2 | P.指导教师2 | |
7 | 学生n | 学生n姓名 | n=1,2,3,4,5 |
(2) 生成程序
参见附件中的“1 .生成全国总决赛结果”。
4.用户参赛信息表格→竞赛报名模板
-
报名模板:
-
1.参赛作品 2.参赛人 3.手机号 4.学号
5.身份证号 6.学校名称 7.学院名称 8.指导老师
9.队名 10.专业名称 11.入学年份 12.学生类别
13.竞赛类别 14.竞赛组别
参赛用户信息:
-
1.学生姓名 2.学生系别 3.学生学号 4.学生班级 5.学生年龄
6.学生专业 7.学生电话 8.学生邮箱 9.队伍名称 10.赛区
11.省市 12.学校 13.组别 14.教师姓名1 15.教师性别1
16.教师系别1 17.教师职称1 18.教师电话1 19.教师邮箱1 20.教师通讯地址1
21.教师姓名2 22.教师性别2 23.教师系别2 24.教师职称2 25.教师电话2
26.教师邮箱2 27.教师通讯地址2 28.教师姓名3 29.教师性别3 30.教师系别3
31.教师职称3 32.教师电话3 33.教师邮箱3 34.教师通讯地址3 35.教师姓名4
36.教师性别4 37.教师系别4 38.教师职称4 39.教师电话4 40.教师邮箱4
41.教师通讯地址4
按照以下映射进行转换:
No | 参赛用于信息 | 竞赛报名表格 | 备注 |
---|---|---|---|
1 | 学生姓名 | 参赛人 | |
2 | 学生学号 | 学号 | |
3 | 学生专业 | 专业名称 | |
4 | 学校 | 学校名称 | |
5 | 组别 | 竞赛组别 | →参赛作品 |
6 | 教师姓名1 | 指导教师 | |
7 | 队伍名称 | 队名 | |
8 | 学生电话 | 手机号 | |
9 | 学生年龄 | 入学年份 | 年龄+n |
10 | 赛区 | 竞赛类别 |
▲ 全国高校大学生竞赛质量提升工作推进会
▌附件:
1.生成全国总决赛结果
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# EXCELSUB.PY -- by Dr. ZhuoQing 2021-01-14
#
# Note:
#============================================================
from head import *
import pandas as pd
#------------------------------------------------------------
teamfile = r'D:\Temp\输出表格-高教学会\竞赛报名模板.xlsx'
resultfile = r'D:\Temp\输出表格-高教学会\竞赛结果模版.xlsx'
finalresult = ('安徽', '山东', '浙江', '东北',
'华北', '华东', '华南', '西部', '创意')
finaldir = r'D:\Temp\Final Result\Excel'
divisiondir = r'D:\Temp\Division Result'
division = ('安徽', '山东', '浙江', '东北',
'华北', '华东', '华南', '西部', '创意')
divisionresult = r'D:\Temp\输出表格-高教学会\竞赛结果模版 - 分赛区成绩.xlsx'
totalappendnum = 0
#------------------------------------------------------------
teamorigin = r'D:\Temp\用户参赛信息表20201124.xlsx'
#------------------------------------------------------------
def showexcel(filename):
excelfile = pd.read_excel(filename)
printf([id for id,c in excelfile.items()])
listvalue = excelfile.values.tolist()
for id,l in enumerate(listvalue):
printff(id, l)
#------------------------------------------------------------
def clearexcel(filename):
excelfile = pd.read_excel(filename)
excelfile = excelfile[0:0]
excelfile.to_excel(filename, sheet_name='Sheet1', index=False)
#------------------------------------------------------------
def appendexcel(filename, dict):
excelfile = pd.read_excel(filename)
row = len(list(excelfile.items())[0][1])
#--------------------------------------------------------
for col in dict:
excelfile[col] = excelfile[col].astype(str)
excelfile.at[row, col] = dict[col]
#--------------------------------------------------------
excelfile.to_excel(filename, sheet_name='Sheet1', index=False)
#------------------------------------------------------------
def appendexcellist(filename, dictlist):
excelfile = pd.read_excel(filename)
rowoffset = len(list(excelfile.items())[0][1])
#--------------------------------------------------------
for id,dict in enumerate(dictlist):
row = id + rowoffset
for col in dict:
excelfile[col] = excelfile[col].astype(str)
excelfile.at[row, col] = dict[col]
if id % 500 == 0:
printf("Append excel %d/%d"%(id, len(dictlist)))
#--------------------------------------------------------
excelfile.to_excel(filename, sheet_name='Sheet1', index=False)
#------------------------------------------------------------
def isname(string):
if type(string) != str: return False
if len(string) < 2: return False
if string == 'nan': return False
if string == '-': return False
return True
#------------------------------------------------------------
def appendfile2result(fname):
f1 = fname + '.xls'
f2 = fname + '.xlsx'
filename = f1
if not os.path.isfile(filename):
filename = f2
if not os.path.isfile(filename):
printf('ERROR: %s does not exist!'%fname)
return
#--------------------------------------------------------
excelfile = pd.read_excel(filename)
rownum = len(list(excelfile.items())[0][1])
for row in range(rownum):
school = excelfile.at[row, '学校名称']
if type(school) != str: continue
if len(school) == 0: continue
adddict = {}
adddict['学院名称'] = school
adddict['队名'] = excelfile.at[row, '队伍名称']
adddict['竞赛类别'] = excelfile.at[row, '组别']
adddict['奖项名称'] = '全国总决' + excelfile.at[row, '奖项']
for i in range(2):
name = excelfile.at[row, '指导教师%d'%(i+1)]
if isname(name):
adddict['指导老师%d'%(i+1)] = name
for i in range(5):
name = excelfile.at[row, '学生%d'%(i+1)]
if isname(name):
adddict['学生%d姓名'%(i+1)] = name
showstr = str(adddict).replace('\u4dae', '')
printf(showstr)
#----------------------------------------------------
global totalappendnum
totalappendnum += 1
adddict['作品编号'] = '%04d'%totalappendnum
appendexcel(resultfile, adddict)
#------------------------------------------------------------
def teamorigin2file(filename):
if not os.path.isfile(filename):
printf('ERROR: %s does not exist!'%fname)
return
#--------------------------------------------------------
excelfile = pd.read_excel(filename)
rownum = len(list(excelfile.items())[0][1])
group2group = {
'学生姓名' : '参赛人',
'学生学号' : '学号',
'学生专业' : '专业名称',
'学校' : '学校名称',
'组别' : '竞赛组别',
'教师姓名1' : '指导老师',
'队伍名称' : '队名',
'学生电话' : '手机号',
'学生年龄' : '入学年份',
'赛区' : '竞赛类别'
}
adddictlist = []
printf("Begin to generate add diction:")
for row in range(rownum):
adddict = {}
for gg in group2group:
adddict[group2group[gg]] = excelfile.at[row, gg]
adddict['参赛作品'] = excelfile.at[row, '组别']
adddictlist.append(adddict)
if row % 1000 == 0:
printff('Add dict: %d/%d'%(row, rownum))
printf("Begin to add to excel:")
appendexcellist(teamfile, adddictlist)
#------------------------------------------------------------
def division2result(outfile, divisionlist):
dictlist = []
for dl in divisionlist:
dlfile = os.path.join(divisiondir, '2020%s奖项.xlsx'%dl)
if not os.path.isfile(dlfile):
dlfile = os.path.join(divisiondir, '2020%s奖项.xls'%dl)
if not os.path.isfile(dlfile):
printf("Can not file the file :%s"%dlfile)
continue
printf("Load file :%s"%dlfile)
excelfile = pd.read_excel(dlfile)
rownum = len(list(excelfile.items())[0][1])
for row in range(rownum):
school = excelfile.at[row, '学校名称']
if type(school) != str: continue
if len(school) == 0: continue
adddict = {}
adddict['学院名称'] = school
adddict['队名'] = excelfile.at[row, '队伍名称']
adddict['竞赛类别'] = excelfile.at[row, '组别']
adddict['奖项名称'] = '分赛区' + str(excelfile.at[row, '奖项'])
for i in range(2):
name = excelfile.at[row, '指导教师%d'%(i+1)]
if isname(name):
adddict['指导老师%d'%(i+1)] = name
for i in range(5):
name = excelfile.at[row, '学生%d'%(i+1)]
if isname(name):
adddict['学生%d姓名'%(i+1)] = name
dictlist.append(adddict)
#--------------------------------------------------------
appendexcellist(outfile, dictlist)
#------------------------------------------------------------
if __name__ == "__main__":
#--------------------------------------------------------
printf("Clear division result.")
clearexcel(divisionresult)
division2result(divisionresult, division)
#--------------------------------------------------------
'''
printf("Clear origin file.")
clearexcel(teamfile)
teamorigin2file(teamorigin)
'''
#--------------------------------------------------------
'''
clearexcel(resultfile)
for ff in finalresult:
fname = os.path.join(finaldir, ff)
printf(fname)
appendfile2result(fname)
'''
#--------------------------------------------------------
#--------------------------------------------------------
printf('\a')
#------------------------------------------------------------
# END OF FILE : EXCELSUB.PY
#============================================================