database_tools_2中添加了生成个人使用记录的功能CalculateDetailedUsages

This commit is contained in:
wangweiye7840 2024-06-12 16:39:49 +08:00
parent 897c4b1a8b
commit 3691d28faa
1 changed files with 39 additions and 0 deletions

View File

@ -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