From 3a452a32b174710b79b552c2395271f30903451d Mon Sep 17 00:00:00 2001 From: wangweiye7840 Date: Sun, 16 Jun 2024 16:06:46 +0800 Subject: [PATCH] =?UTF-8?q?=E7=B3=BB=E5=88=97=E8=AE=B2=E4=B9=89=E7=94=9F?= =?UTF-8?q?=E6=88=90=E5=8A=9F=E8=83=BD=E5=B7=B2=E9=80=82=E9=85=8Dmariadb?= =?UTF-8?q?=E4=B8=8A=E7=9A=84=E8=AE=B2=E4=B9=89=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 工具v4/database_tools_2.py | 57 +++++++++++++++++++++++------ 工具v4/系列讲义生成.py | 75 +++++++++++++++++++------------------- 2 files changed, 84 insertions(+), 48 deletions(-) diff --git a/工具v4/database_tools_2.py b/工具v4/database_tools_2.py index e364166d..c26193af 100644 --- a/工具v4/database_tools_2.py +++ b/工具v4/database_tools_2.py @@ -2519,9 +2519,9 @@ def GenerateSectionBodyStringfromDict(problems,sectiontitles,prodict,objdict,bnd bodystring += sectionstring return bodystring #返回主题内容字符串 -def GenerateSingleLessonTeXfromDict(id,notesdict,pro_dict,obj_dict,bn_dict,misc,consecutivenumbering=False): - structure = notesdict["structures"][id[0].upper()]["structure"] - note_contents = notesdict["notes"][id] +def GenerateSingleLessonTeXfromDict(id,structuredict,notesdict,pro_dict,obj_dict,bn_dict,misc,consecutivenumbering=False): + structure = structuredict[id[0:5].upper()]["structure"] + note_contents = notesdict[id] sections_list = [] problems_list = [] for key in structure: @@ -2533,9 +2533,9 @@ def GenerateSingleLessonTeXfromDict(id,notesdict,pro_dict,obj_dict,bn_dict,misc, rawoutput = re.sub(r"\\section\{[^\n]*","",rawoutput) return rawoutput -def GenerateSingleLessonNotefromMariaDB(cursor,id,notesdict,templatepath,outputfilepath,misc,consecutivenumbering = False): #20240415版讲义生成 +def GenerateSingleLessonNotefromMariaDB(cursor,id,structuredict,notesdict,templatepath,outputfilepath,misc,consecutivenumbering = False): #20240415版讲义生成 notetitle = id + r" \ " + notesdict["notes"][id]["name"] - structure = notesdict["structures"][id[0].upper()]["structure"] + structure = structuredict[id[0:5].upper()]["structure"] note_contents = notesdict["notes"][id] output = "" sections_list = [] @@ -2573,10 +2573,10 @@ def GenerateSingleLessonNotefromMariaDB(cursor,id,notesdict,templatepath,outputf print("编译失败") return latex_data # 返回有错误的latex源代码 -def GenerateSingleLessonNote(id,notesdict,metadict,templatepath,outputfilepath,consecutivenumbering = False, answered = False): #20231215版讲义生成 +def GenerateSingleLessonNote(id,structuredict, notesdict,metadict,templatepath,outputfilepath,consecutivenumbering = False, answered = False): #20231215版讲义生成 notetitle = id + r" \ " + notesdict["notes"][id]["name"] - structure = notesdict["structures"][id[0].upper()]["structure"] - note_contents = notesdict["notes"][id] + structure = structuredict[id[0:5].upper()]["structure"] + note_contents = notesdict[id] output = "" sections_list = [] problems_list = [] @@ -2623,6 +2623,8 @@ def getUnitNumber(string): unitlist = ["暂无对应","第一单元","第二单元","第三单元","第四单元","第五单元","第六单元","第七单元","第八单元","第九单元"] if string in unitlist[1:]: return unitlist.index(string) + + def ExtractProblemIDs(paperdict,pro_dict):#从备课组材料的每一张讲义的dict(paperdict)中提取题号 output = [] @@ -3290,9 +3292,9 @@ def findxiaobenIDs(jsonpath,grade = ""): #根据jsonpath中的校本材料获取 if "校本材料.json" in files: jsonlists.append(os.path.join(loc,"校本材料.json")) for jsonfile in jsonlists: - jsondict = load_dict(jsonfile)["notes"] - for pid in jsondict: - if pid[1:5] == grade or grade == "": + jsondict = load_dict(jsonfile)["notes"] + for pid in jsondict: + if pid[1:5] == grade or grade == "": for part in jsondict[pid]: if type(jsondict[pid][part]) == list and isIDpart(jsondict[pid][part]): jsonIDs += jsondict[pid][part].copy() @@ -3326,5 +3328,38 @@ def generateUsagedetail(zipfilepath,tempdir,answersheetseekingpath,statsfilename return outputlist #返回由usages开始的使用记录列表 +def load_notes_dict_from_mariadb(cursor): #从mariadb获取讲义列表 + sql = "SELECT nid,name,filename,structure FROM notes WHERE NOT obsolete;" + cursor.execute(sql) + ret = cursor.fetchall() + notes_dict = {} + for nid,name,filename,structure in ret: + temp_dict = json.loads(structure) + notes_dict[nid] = {'id':nid,'name':name,'filename':filename} + for key in temp_dict: + notes_dict[nid][key] = temp_dict[key] + return notes_dict + +def load_structures_dict_from_mariadb(cursor): # 从mariadb获取讲义结构列表 + sql = "SELECT initial,description,consecutivenumbering,structure FROM notestructures WHERE NOT obsolete;" + cursor.execute(sql) + ret = cursor.fetchall() + structures_dict = {} + for initial,description,consecutivenumbering,structure in ret: + structures_dict[initial] = {'initial':initial,'description':description,'consecutivenumbering':bool(consecutivenumbering),'structure':json.loads(structure)} + return structures_dict + +def load_answersheets_dict_from_mariadb(cursor): # 从mariadb获取答题纸列表 + sql = "SELECT pid,nid,parts,idlist,marks,exclude FROM answersheets WHERE NOT obsolete;" + cursor.execute(sql) + ret = cursor.fetchall() + answersheet_dict = {} + for pid,nid,parts,idlist,marks,exclude in ret: + answersheet_dict[pid] = {'nid':nid} + for key,item in [('parts',parts),('idlist',idlist),('marks',marks),('exclude',exclude)]: + if not item is None: + answersheet_dict[pid][key] = item + return answersheet_dict + if __name__ == "__main__": print("数据库工具, import用.") \ No newline at end of file diff --git a/工具v4/系列讲义生成.py b/工具v4/系列讲义生成.py index 33e10cd9..9d9ed08f 100644 --- a/工具v4/系列讲义生成.py +++ b/工具v4/系列讲义生成.py @@ -79,14 +79,16 @@ class MyWindow_jysc(QWidget,Ui_Form): def saveandbuild(self): patterns = self.lineEdit_regex.text().strip().split(",") - jsonpath = "../备课组" #有json文件的根目录, 文件名需为"校本材料.json" - jsondicts = [] - for loc,dirs,files in os.walk(jsonpath): - if "校本材料.json" in files: - jsondicts.append(load_dict(os.path.join(loc,"校本材料.json"))) + # jsonpath = "../备课组" #有json文件的根目录, 文件名需为"校本材料.json" + # jsondicts = [] + # for loc,dirs,files in os.walk(jsonpath): + # if "校本材料.json" in files: + # jsondicts.append(load_dict(os.path.join(loc,"校本材料.json"))) mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = self.database_name) mycursor = mydb.cursor() + notes_dict = load_notes_dict_from_mariadb(mycursor) + structures_dict = load_structures_dict_from_mariadb(mycursor) raw_pro_dict,obj_dict,bn_dict,unit_obj_dict = generateDictsfromMariaDB(mycursor) if self.radioButton_teacher.isChecked() and self.checkBox_usages.isChecked() and not self.lineEdit_grades.text().strip() == "": grades = self.lineEdit_grades.text().strip().split(",") @@ -114,41 +116,40 @@ class MyWindow_jysc(QWidget,Ui_Form): } papernames = [] multitexdata = [] - for notes_dict in jsondicts: - for lessonid in notes_dict["notes"]: - coincideflag = False - for lessonpattern in patterns: - if re.findall(lessonpattern,lessonid) != []: - coincideflag = True - break - if coincideflag: - print(f"正在生成 {lessonid} {notes_dict['notes'][lessonid]['filename']} 的 .tex 文件") - filename = notes_dict["notes"][lessonid]["id"]+notes_dict["notes"][lessonid]["filename"]+".tex" - papertype = lessonid[0] - consecutivenumbering = notes_dict["structures"][papertype]["consecutivenumbering"] - texdata = GenerateSingleLessonTeXfromDict(id=lessonid, notesdict=notes_dict, pro_dict=pro_dict, obj_dict=obj_dict,bn_dict=bn_dict,misc = configjson, consecutivenumbering= consecutivenumbering) - papernames.append(notes_dict["notes"][lessonid]["id"]+" \\ "+notes_dict["notes"][lessonid]["name"]) - print(f"已生成 {papernames[-1]} 文件") - multitexdata.append(texdata) - latex_raw = ReadTextFile("./模板文件/讲义模板.txt") - latex_raw = latex_raw.replace(r"学号\blank{50} \ 姓名\blank{80}","上海市控江中学") #替换掉模板中的姓名学号 + for lessonid in notes_dict: + coincideflag = False + for lessonpattern in patterns: + if re.findall(lessonpattern,lessonid) != []: + coincideflag = True + break + if coincideflag: + print(f"正在生成 {lessonid} {notes_dict[lessonid]['filename']} 的 .tex 文件") + filename = notes_dict[lessonid]["id"]+notes_dict[lessonid]["filename"]+".tex" + papertype = lessonid[0:5] + consecutivenumbering = structures_dict[papertype]["consecutivenumbering"] + texdata = GenerateSingleLessonTeXfromDict(id=lessonid, structuredict = structures_dict, notesdict=notes_dict, pro_dict=pro_dict, obj_dict=obj_dict,bn_dict=bn_dict,misc = configjson, consecutivenumbering= consecutivenumbering) + papernames.append(notes_dict[lessonid]["id"]+" \\ "+notes_dict[lessonid]["name"]) + print(f"已生成 {papernames[-1]} 文件") + multitexdata.append(texdata) + latex_raw = ReadTextFile("./模板文件/讲义模板.txt") + latex_raw = latex_raw.replace(r"学号\blank{50} \ 姓名\blank{80}","上海市控江中学") #替换掉模板中的姓名学号 - if sys.platform == "darwin": #非win系统用默认字体 - latex_raw = re.sub(r"fontset[\s]*=[\s]*none","fontset = fandol",latex_raw) - latex_raw = re.sub(r"\\setCJKmainfont",r"% \\setCJKmainfont",latex_raw) + if sys.platform == "darwin": #非win系统用默认字体 + latex_raw = re.sub(r"fontset[\s]*=[\s]*none","fontset = fandol",latex_raw) + latex_raw = re.sub(r"\\setCJKmainfont",r"% \\setCJKmainfont",latex_raw) - latex_data = StringSubstitute(r"<<[\s\S]*?待替换[\s\S]*?>>",latex_raw,(papernames[-1],texdata)) #替换标题和bodystring - outputfilepath = os.path.join(self.outputpath,filename) - SaveTextFile(latex_data,outputfilepath) #保存.tex文件 + latex_data = StringSubstitute(r"<<[\s\S]*?待替换[\s\S]*?>>",latex_raw,(papernames[-1],texdata)) #替换标题和bodystring + outputfilepath = os.path.join(self.outputpath,filename) + SaveTextFile(latex_data,outputfilepath) #保存.tex文件 - if configjson["编译单个文件"] == True: - outputdir,filename = os.path.split(outputfilepath) - print(f"{filename}编译中...") - if XeLaTeXCompile(outputdir,filename): - print("编译成功") - else: - print("编译失败") - # print(lessonid) + if configjson["编译单个文件"] == True: + outputdir,filename = os.path.split(outputfilepath) + print(f"{filename}编译中...") + if XeLaTeXCompile(outputdir,filename): + print("编译成功") + else: + print("编译失败") + # print(lessonid) # print(configjson) # print("\n".join(patterns)) mydb.close()