From 3691d28faa3db0cfda5e66ced832bebe2fabbfca Mon Sep 17 00:00:00 2001 From: wangweiye7840 Date: Wed, 12 Jun 2024 16:39:49 +0800 Subject: [PATCH] =?UTF-8?q?database=5Ftools=5F2=E4=B8=AD=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E4=BA=86=E7=94=9F=E6=88=90=E4=B8=AA=E4=BA=BA=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E7=9A=84=E5=8A=9F=E8=83=BDCalculateDetailedU?= =?UTF-8?q?sages?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 工具v4/database_tools_2.py | 39 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/工具v4/database_tools_2.py b/工具v4/database_tools_2.py index 4b5ac898..fe786617 100644 --- a/工具v4/database_tools_2.py +++ b/工具v4/database_tools_2.py @@ -2730,6 +2730,45 @@ def generateIDtoUsageCorrespondence(idlist,validcols,names): #根据idlist(题 corr_dict[idlist[i]] = collist return corr_dict + +def GetPaperDate(string): + return re.findall(r"\((\d{8})\)",string)[0] + +def CalculateDetailedUsages(xiaoxianpid,statsfilepathlist,statsfilename,gradename,threshold,marks,correspondence_dict,validcols,paperdate,exclude = {}):#根据小闲uid,统计数据所在的路径,文件名,年级,阈值,分数列表和题号列数(0-len(validcols))对应字典,以及原excel文件中的有效列位置validcols, 日期date, 生成单个学生的每道题目的正误数据, 如果有正确率大于1的则返回False + outputlist = [] + marks = [int(mark) for mark in marks] + for dir in statsfilepathlist: + classname, valid = CheckValidity(dir,gradename,threshold) + if valid: + dfcurrent = pd.read_excel(os.path.join(dir,statsfilename)) + for row in range(2,len(dfcurrent)-2): #学生的数据行 + student_name = dfcurrent.iloc[row,0] + student_id = dfcurrent.iloc[row,1] + diffs = dfcurrent.iloc[row,validcols]/marks + if max(diffs)>1: + print("满分数据有误!!!") + return False + else: + diffs_out = [f"{t:.3f}" for t in diffs] + for id in correspondence_dict: + cols = correspondence_dict[id] + if not len(cols) == 0 and not (id in exclude and classname[-3:] in generate_classid(exclude[id])): + diffs = [diffs_out[u] for u in cols] + usages = { + "ID": id, + "date": paperdate, + "studentid": student_id, + "studentname": student_name, + "diff": diffs, + "answersheet": xiaoxianpid + } + outputlist.append(usages) + return outputlist + + + + + def CalculateUsages(statsfilepathlist,statsfilename,gradename,threshold,marks,correspondence_dict,validcols,date,exclude = {}): #根据统计数据所在的路径,文件名,年级,阈值,分数列表和题号列数(0-len(validcols))对应字典,以及原excel文件中的有效列位置validcols, 日期date, 生成usages的metadata.txt文件的内容, 如果有正确率大于1的则返回False output = "usages\n\n\n" validflag = True