继续丰富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)
|
||||
|
||||
|
||||
def spareIDs(filename): #返回空闲题号
|
||||
pro_dict = load_dict(filename)
|
||||
idlist = list(pro_dict.keys())
|
||||
def spareIDs(dictname): #返回空闲题号
|
||||
idlist = list(dictname.keys())
|
||||
used_str = generate_exp(idlist)
|
||||
used_list = used_str.split(",")
|
||||
output = ""
|
||||
|
|
@ -140,6 +139,50 @@ def parse_usage(datastring): #对单个usages中的项的结果进行分词
|
|||
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__":
|
||||
print("数据库工具, import用.")
|
||||
Reference in New Issue