This repository has been archived on 2024-06-23. You can view files and clone it, but cannot push or open issues or pull requests.
mathdeptv2/工具/批量添加题库字段数据.ipynb

198 lines
11 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"题号: 012634 , 字段: ans 中已修改数据: $\\{0\\}$\n",
"题号: 012635 , 字段: ans 中已修改数据: $2$\n",
"题号: 012636 , 字段: ans 中已修改数据: $[-2,1]$\n",
"题号: 012637 , 字段: ans 中已修改数据: $\\pi$\n",
"题号: 012638 , 字段: ans 中已修改数据: $(-1,1)$\n",
"题号: 012639 , 字段: ans 中已修改数据: $-672$\n",
"题号: 012640 , 字段: ans 中已修改数据: $1$\n",
"题号: 012641 , 字段: ans 中已修改数据: $4$\n",
"题号: 012642 , 字段: ans 中已修改数据: $\\dfrac 29$\n",
"题号: 012643 , 字段: ans 中已修改数据: $2\\sqrt{3}$\n",
"题号: 012644 , 字段: ans 中已修改数据: $(-\\infty,-\\dfrac{182}3)$\n",
"题号: 012645 , 字段: ans 中已修改数据: $\\dfrac{29}{13}$\n",
"题号: 012646 , 字段: ans 中已修改数据: C\n",
"题号: 012647 , 字段: ans 中已修改数据: C\n",
"题号: 012648 , 字段: ans 中已修改数据: B\n",
"题号: 012649 , 字段: ans 中已修改数据: D\n",
"题号: 012650 , 字段: ans 中已修改数据: (1) 证明略; (2) $\\arcsin \\dfrac{\\sqrt{15}}{15}$\n",
"题号: 012651 , 字段: ans 中已修改数据: (1) $y+1=0$; (2) 当$0<a<1$时, 函数$y=f(x)$在$(0,1]$及$[\\dfrac 1a,+\\infty)$上严格增, 在$[1,\\dfrac 1a]$上严格减; 当$a=1$时, 函数$y=f(x)$在$(0,+\\infty)$上严格增\n",
"题号: 012652 , 字段: ans 中已修改数据: (1) $200+100\\sqrt{3}$米; (2) $2022$万元\n",
"题号: 012653 , 字段: ans 中已修改数据: (1) $\\lambda_1=2$; (2) $x^2+y^2=1$或$x^2-3y^2=1$; (3) 存在, $x_2=1$\n",
"题号: 012654 , 字段: ans 中已修改数据: (1) $b_1=1$, $b_2=2$, $b_3=3$, $b_4=4$; (2) 存在, $k$的最小值为$17$; (3) 证明略\n",
"题号: 012592 , 字段: ans 中已修改数据: $1$\n",
"题号: 012593 , 字段: ans 中已修改数据: $2$\n",
"题号: 012594 , 字段: ans 中已修改数据: $(1,+\\infty)$\n",
"题号: 012595 , 字段: ans 中已修改数据: $0$\n",
"题号: 012596 , 字段: ans 中已修改数据: $\\pi$\n",
"题号: 012597 , 字段: ans 中已修改数据: $16$\n",
"题号: 012598 , 字段: ans 中已修改数据: $60^\\circ$\n",
"题号: 012599 , 字段: ans 中已修改数据: $\\dfrac 35$\n",
"题号: 012600 , 字段: ans 中已修改数据: $0$\n",
"题号: 012601 , 字段: ans 中已修改数据: $2$\n",
"题号: 012602 , 字段: ans 中已修改数据: $\\dfrac 34$\n",
"题号: 012603 , 字段: ans 中已修改数据: $k\\le 5+3\\sqrt{2}$\n",
"题号: 012604 , 字段: ans 中已修改数据: C\n",
"题号: 012605 , 字段: ans 中已修改数据: D\n",
"题号: 012606 , 字段: ans 中已修改数据: B\n",
"题号: 012607 , 字段: ans 中已修改数据: A\n",
"题号: 012608 , 字段: ans 中已修改数据: (1) $\\dfrac {2\\pi}3$; (2) $S=\\sin(\\theta-\\dfrac\\pi 3)+\\dfrac{\\sqrt{3}}2$, $\\theta\\in (0,\\pi)$, $S$的最大值为$1+\\dfrac{\\sqrt{3}}2$\n",
"题号: 012609 , 字段: ans 中已修改数据: (1) $58$; (2) $m=2^{k-1}$, 理由略\n",
"题号: 012610 , 字段: ans 中已修改数据: (1) 证明略; (2) $18$米\n",
"题号: 012611 , 字段: ans 中已修改数据: (1) 值为$\\dfrac 23$, 是定值; (2) $\\dfrac{20}3$; (3) $k_1=\\dfrac{\\sqrt{30}}6$时, $|k_1-k_2|$取到最小值$\\dfrac{\\sqrt{30}}3$\n",
"题号: 012612 , 字段: ans 中已修改数据: (1) 具有性质$M$, 理由略; (2) 存在, $c$的范围为$(0,+\\infty)$; (3) $3$\n",
"题号: 012529 , 字段: ans 中已修改数据: $\\{2,3,4\\}$\n",
"题号: 012530 , 字段: ans 中已修改数据: $-1$\n",
"题号: 012531 , 字段: ans 中已修改数据: $23$\n",
"题号: 012532 , 字段: ans 中已修改数据: $(-3,2)$\n",
"题号: 012533 , 字段: ans 中已修改数据: $\\dfrac 65$\n",
"题号: 012534 , 字段: ans 中已修改数据: $\\dfrac\\pi 4$\n",
"题号: 012535 , 字段: ans 中已修改数据: $3$\n",
"题号: 012536 , 字段: ans 中已修改数据: $\\dfrac 23$\n",
"题号: 012537 , 字段: ans 中已修改数据: $2\\sqrt{30}$\n",
"题号: 012538 , 字段: ans 中已修改数据: $-\\dfrac 35$\n",
"题号: 012539 , 字段: ans 中已修改数据: $\\dfrac{125\\pi}{48}$\n",
"题号: 012540 , 字段: ans 中已修改数据: $(\\dfrac{13}{15},\\dfrac 76)$\n",
"题号: 012541 , 字段: ans 中已修改数据: D\n",
"题号: 012542 , 字段: ans 中已修改数据: A\n",
"题号: 012543 , 字段: ans 中已修改数据: B\n",
"题号: 012544 , 字段: ans 中已修改数据: D\n",
"题号: 012545 , 字段: ans 中已修改数据: (1) $[k\\pi-\\dfrac\\pi 6,k\\pi+\\dfrac\\pi 3]$, $k\\in \\mathbf{Z}$; (2) 最大值为$\\dfrac{\\sqrt{3}-1}2$, 最小值为$-\\dfrac 32$\n",
"题号: 012546 , 字段: ans 中已修改数据: (1) 证明略; (2) 证明略\n",
"题号: 012547 , 字段: ans 中已修改数据: (1) $2480$人; (2) $11$月$11$日新感染者人数最多, 为$630$人\n",
"题号: 012548 , 字段: ans 中已修改数据: (1) $\\dfrac{\\sqrt{2}}2$; (2) 过定点$(\\dfrac 23,0)$; (3) $\\dfrac 19$\n",
"题号: 012549 , 字段: ans 中已修改数据: (1) $5$; (2) 在定直线$y=2x$上; (3) 当且仅当$a=-\\dfrac 2{\\mathrm{e}}$时存在, $k=3$, $x_0=2$\n"
]
}
],
"source": [
"import os,re,json\n",
"\n",
"\"\"\"---明确数据文件位置---\"\"\"\n",
"datafile = \"文本文件/metadata.txt\"\n",
"# 双回车分隔,记录内单回车分隔列表,首行为字段名\n",
"\"\"\"---文件位置结束---\"\"\"\n",
"\n",
"def trim(string):\n",
" string = re.sub(r\"^[ \\t\\n]*\",\"\",string)\n",
" string = re.sub(r\"[ \\t\\n]*$\",\"\",string)\n",
" return string\n",
"def FloatToInt(string):\n",
" f = float(string)\n",
" if abs(f-round(f))<0.01:\n",
" f = round(f)\n",
" return f\n",
"\n",
"with open(datafile,\"r\",encoding=\"utf8\") as f:\n",
" data = f.read()\n",
"pos = data.index(\"\\n\")\n",
"field = data[:pos].strip()\n",
"appending_data = data[pos:]\n",
"\n",
"with open(r\"../题库0.3/Problems.json\",\"r\",encoding = \"utf8\") as f:\n",
" database = f.read()\n",
"pro_dict = json.loads(database)\n",
"with open(r\"../题库0.3/LessonObj.json\",\"r\",encoding = \"utf8\") as f:\n",
" database = f.read()\n",
"obj_dict = json.loads(database)\n",
"\n",
"#该字段列表可能需要更新\n",
"fields = [\"content\",\"objs\",\"tags\",\"genre\",\"ans\",\"solution\",\"duration\",\"usages\",\"origin\",\"edit\",\"same\",\"related\",\"remark\",\"space\"]\n",
"\n",
"if field in fields:\n",
" field_type = type(pro_dict[\"000001\"][field])\n",
" datalist = [record.strip() for record in appending_data.split(\"\\n\\n\") if len(trim(record)) > 0]\n",
" for record in datalist:\n",
" id = re.findall(r\"^[\\d]{1,}\",record)[0]\n",
" data = record[len(id):].strip()\n",
" id = id.zfill(6)\n",
" if not id in pro_dict:\n",
" print(\"题号:\",id,\"不在数据库中.\")\n",
" break\n",
" \n",
" #字符串类型字段添加数据\n",
" elif field_type == str and data in pro_dict[id][field]:\n",
" print(\"题号:\",id,\", 字段:\",field,\"中已有该数据:\",data)\n",
" elif field_type == str and not data in pro_dict[id][field] and not field == \"ans\" and not field == \"space\":\n",
" origin_data = pro_dict[id][field]\n",
" new_data = trim(origin_data + \"\\n\" + data)\n",
" pro_dict[id][field] = new_data\n",
" print(\"题号:\",id,\", 字段:\",field,\"中已添加数据:\",data)\n",
" elif field_type == str and not data in pro_dict[id][field] and field == \"ans\" or field == \"space\":\n",
" pro_dict[id][field] = data\n",
" print(\"题号:\",id,\", 字段:\",field,\"中已修改数据:\",data)\n",
" \n",
" #数值类型字段添加数据\n",
" elif (field_type == int or field_type == float) and abs(float(data) - pro_dict[id][field])<0.01:\n",
" print(\"题号:\",id,\", 字段:\",field,\"中已有该数据:\",FloatToInt(data))\n",
" elif (field_type == int or field_type == float) and abs(float(data) - pro_dict[id][field])>=0.01:\n",
" pro_dict[id][field] = FloatToInt(data)\n",
" print(\"题号:\",id,\", 字段:\",field,\"中已修改数据:\",FloatToInt(data))\n",
" \n",
" #列表类型字段添加数据\n",
" elif field_type == list:\n",
" cell_data_list = [d.strip() for d in data.split(\"\\n\")]\n",
" for cell_data in cell_data_list:\n",
" if cell_data in pro_dict[id][field]:\n",
" print(\"题号:\",id,\", 字段:\",field,\"中已有该数据:\",cell_data)\n",
" elif not field == \"objs\":\n",
" pro_dict[id][field].append(cell_data)\n",
" print(\"题号:\",id,\", 字段:\",field,\"中已添加数据:\",cell_data)\n",
" else:\n",
" if not cell_data in obj_dict and not cell_data.upper() == \"KNONE\":\n",
" print(\"题号:\",id,\", 字段:\",field,\"目标编号有误:\",cell_data)\n",
" else:\n",
" pro_dict[id][field].append(cell_data.upper())\n",
" print(\"题号:\",id,\", 字段:\",field,\"中已添加数据:\",cell_data.upper())\n",
"\n",
"with open(r\"../题库0.3/Problems.json\",\"w\",encoding = \"utf8\") as f:\n",
" f.write(json.dumps(pro_dict,indent=4,ensure_ascii=False))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3.9.15 ('pythontest')",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.15"
},
"orig_nbformat": 4,
"vscode": {
"interpreter": {
"hash": "91219a98e0e9be72efb992f647fe78b593124968b75db0b865552d6787c8db93"
}
}
},
"nbformat": 4,
"nbformat_minor": 2
}