继续丰富database tools

This commit is contained in:
weiye.wang 2023-06-22 22:02:40 +08:00
parent 1b93b7c314
commit 1277bfdbd4
1 changed files with 46 additions and 3 deletions

View File

@ -113,9 +113,8 @@ def extractIDs(filePath): #提取.txt,.tex或.pdf文件中的题号, 返回含
return generate_exp(ids) return generate_exp(ids)
def spareIDs(filename): #返回空闲题号 def spareIDs(dictname): #返回空闲题号
pro_dict = load_dict(filename) idlist = list(dictname.keys())
idlist = list(pro_dict.keys())
used_str = generate_exp(idlist) used_str = generate_exp(idlist)
used_list = used_str.split(",") used_list = used_str.split(",")
output = "" output = ""
@ -140,6 +139,50 @@ def parse_usage(datastring): #对单个usages中的项的结果进行分词
return({"date":date,"classname":classname,"difficulty":diff}) #返回一个字典, "date"表示日期, "classname"表示班级, "difficultiy"表示难度列表 return({"date":date,"classname":classname,"difficulty":diff}) #返回一个字典, "date"表示日期, "classname"表示班级, "difficultiy"表示难度列表
def GenerateProblemListFromString(data): #从来自.tex文件的字符串生成题目列表, 每个item是一道题目, 新一行的%用作前缀
try:
data = re.findall(r"\\begin\{document\}([\s\S]*?)\\end\{document\}",data)[0]
except:
pass
data = re.sub(r"\n{2,}","\n",data)
data = re.sub(r"\\item",r"\\enditem\\item",data)
data = re.sub(r"\\end\{enumerate\}",r"\\enditem",data) #切除无关信息, 保留关键信息
problempositions = []
for item in re.finditer(r"\\item([\s\S]*?)\\enditem",data):
problempositions.append(item.regs[1]) #确定题目内容所在位置
problem_list = []
for pos in problempositions:
content = data[pos[0]:pos[1]].strip()
content = re.sub(r"\n\%[\s\S]*$","",content) #题目内容
subdata = data[:pos[0]] #开始寻找出处中缀
suflist = re.findall(r"\n(\%\s{0,}[\S]+)\n",subdata)
if len(suflist) == 0:
suffix = ""
else:
suffix = suflist[-1].replace("%","").strip()
problem_list.append((content,suffix))
return problem_list #返回一个列表, 每一项是一个由 题目内容 和 题目来源前缀 组成的元组
def CreateEmptyProblem(problem): # 根据已有的题目创建新的空题目
NewProblem = problem.copy()
for field in NewProblem:
if type(NewProblem[field]) == str:
NewProblem[field] = ""
elif type(NewProblem[field]) == list:
NewProblem[field] = []
elif type(NewProblem[field]) == int or type(NewProblem[field]) == float:
NewProblem[field] = -1
return NewProblem #返回一个空题目的字典, ID和内容待赋值
# 创建新题目
def CreateNewProblem(id,content,origin,dict,editor): # 构建一道新题目的字典
NewProblem = CreateEmptyProblem(dict["000001"])
NewProblem["id"] = str(id).zfill(6)
NewProblem["content"] = content
NewProblem["origin"] = origin
NewProblem["edit"] = [editor]
return NewProblem # 返回一道新题目的字典, 已赋新的ID, 内容, 来源和编辑者
if __name__ == "__main__": if __name__ == "__main__":
print("数据库工具, import用.") print("数据库工具, import用.")