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