{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "题号: 030276 , 字段: ans 中已修改数据: (1) 确定性现象; (2) 随机现象; (3) 确定性现象; (4) 随机现象\n",
      "题号: 009736 , 字段: ans 中已修改数据: $\\Omega = \\{1,2,3,4,5,6\\}$, $A=\\{2,3,4,5,6\\}$, $B=\\{1,3,5\\}$, $C=\\{3,4,5,6\\}$\n",
      "题号: 010539 , 字段: ans 中已修改数据: $\\Omega=\\{W_1B_1,W_1B_2,W_1R_1,W_1R_2,W_1R_3,B_1B_2,B_1R_1,B_1R_2,B_1R_3,B_2R_1,B_2R_2,B_2R_3,R_1R_2,R_1R_3,R_2R_3\\}$, $A=\\{W_1B_1,W_1B_2,W_1R_1,W_1R_2,W_1R_3\\}$, $B=\\{W_1B_1,W_1B_2,B_1B_2,B_1R_1,B_1R_2,B_1R_3,B_2R_1,B_2R_2,B_2R_3\\}$. 或者$\\Omega' = \\{WB,WR,BB,BR,RR\\}$, $A'=\\{WB,WR\\}$, $B'=\\{WB,BB,BR\\}$\n",
      "题号: 000218 , 字段: ans 中已修改数据: $\\dfrac 25$\n",
      "题号: 000219 , 字段: ans 中已修改数据: $\\dfrac 3{10}$\n",
      "题号: 000223 , 字段: ans 中已修改数据: (1) $\\Omega = \\{W_1B_1,W_1B_2,W_2B_1,W_2B_2,W_3B_1,W_3B_2,B_1B_2\\}$; (2) $\\dfrac 3{10}$; (3) $\\dfrac 35$\n",
      "题号: 002662 , 字段: ans 中已修改数据: $\\dfrac 38$\n",
      "题号: 002664 , 字段: ans 中已修改数据: $\\dfrac{16}{33}$\n",
      "题号: 003660 , 字段: ans 中已修改数据: $\\dfrac 15$\n",
      "题号: 010544 , 字段: ans 中已修改数据: B\n",
      "题号: 000227 , 字段: ans 中已修改数据: $\\dfrac 23$\n",
      "题号: 009745 , 字段: ans 中已修改数据: 证明略\n",
      "题号: 010550 , 字段: ans 中已修改数据: $\\dfrac 35$\n",
      "题号: 010540 , 字段: ans 中已修改数据: (1) $\\Omega = \\{BBGG,BGBG,BGGB,GGBB,GBGB,GBBG\\}$等; (2) $A=\\{BGBG,GBGB\\}$等; (3) $B=\\{BGBG,BGGB,GBGB,GBBG\\}$等\n",
      "题号: 010535 , 字段: ans 中已修改数据: (1) 错误; (2) 错误; (3) 正确\n",
      "题号: 000222 , 字段: ans 中已修改数据: $\\dfrac 3{10}$\n",
      "题号: 003585 , 字段: ans 中已修改数据: $\\dfrac 3{10}$\n",
      "题号: 003787 , 字段: ans 中已修改数据: B\n",
      "题号: 004647 , 字段: ans 中已修改数据: $\\dfrac 34$\n",
      "题号: 009349 , 字段: ans 中已修改数据: $\\dfrac 1{28}$, $\\dfrac 37$\n",
      "题号: 000229 , 字段: ans 中已修改数据: $\\dfrac {13}{42}$\n",
      "题号: 009741 , 字段: ans 中已修改数据: $P(A_0)=\\dfrac 13$, $P(A_1)=\\dfrac 12$, $P(A_2)=0$, $P(A_3)=\\dfrac 16$\n",
      "题号: 010545 , 字段: ans 中已修改数据: $0.10$\n",
      "题号: 009744 , 字段: ans 中已修改数据: 证明略\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.8.8 ('base')",
   "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.8.8"
  },
  "orig_nbformat": 4,
  "vscode": {
   "interpreter": {
    "hash": "d311ffef239beb3b8f3764271728f3972d7b090c974f8e972fcdeedf230299ac"
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
