继续丰富database tools
This commit is contained in:
parent
1b93b7c314
commit
1277bfdbd4
|
|
@ -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用.")
|
||||||
Reference in New Issue