{ "cells": [ { "cell_type": "markdown", "id": "bfa33ac5-8fe9-4845-8b1d-56c509afcb83", "metadata": { "tags": [] }, "source": [ "## 体质检测管理" ] }, { "cell_type": "markdown", "id": "78dc4774-e1b1-40d8-8783-12ada9db45be", "metadata": {}, "source": [ "### 体测人员导入" ] }, { "cell_type": "code", "execution_count": null, "id": "d2ea710d-34be-47ed-afd8-343137ee9ac5", "metadata": { "tags": [] }, "outputs": [], "source": [ "import openpyxl\n", "import json\n", "\n", "\n", "wb = openpyxl.load_workbook('data/安庆石化2022.xlsx')\n", "sheet = wb.active\n", "# sheets = wb.sheetnames\n", "person = {}\n", "\n", "for n in range(2, sheet.max_row+1):\n", " code = int(sheet.cell(n, 2).value)\n", " person.setdefault(code, {})\n", " dict1 = {}\n", " dict1['name'] = sheet.cell(n, 3).value\n", " dict1['sex'] = sheet.cell(n, 4).value\n", " dict1['unit'] = sheet.cell(n, 1).value\n", " dict1['id_num'] = sheet.cell(n,6).value\n", " person[code] = dict1\n", "filename = 'data/安庆炼化人员名单2022.json'\n", "with open(filename, 'w') as fl:\n", " json.dump(person, fl, ensure_ascii=False)\n", "print('ok')" ] }, { "cell_type": "markdown", "id": "eefb520d-0aee-4f92-b6a9-af9efaa88049", "metadata": {}, "source": [ "### 导出测试成绩" ] }, { "cell_type": "code", "execution_count": null, "id": "c1e1b40c-d73a-4e2e-8c22-4d3ae73ede6f", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "\n", "items = ['身高','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']\n", "title = ['编号','姓名','年龄','身高','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']\n", "filename = 'data/result_2209.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "list1 = []\n", "for k, v in dict1.items():\n", " list2 = []\n", " list2.append(k)\n", " list2.append(v['name'])\n", " if 'id' in v.keys(): \n", " age = v['id'][6:10]+'-'+v['id'][10:12]+'-'+v['id'][12:14]\n", " else:\n", " age = v['birth']\n", " list2.append(age)\n", " for item in items:\n", " if item in v.keys():\n", " list2.append(v[item]['成绩'])\n", " elif item =='name':\n", " list2.append(v[item])\n", " else:\n", " list2.append('') \n", " list1.append(list2)\n", "filename = 'data/2022年安庆得分情况表.xlsx'\n", "wb = openpyxl.Workbook()\n", "sheet = wb.active\n", "sheet.append(title)\n", "for row in list1:\n", " sheet.append(row)\n", " \n", "wb.save(filename)" ] }, { "cell_type": "code", "execution_count": null, "id": "a3f0d4b9-78c6-4fd2-baf7-a05962e7904c", "metadata": {}, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "\n", "items = ['身高','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']\n", "title = ['编号','姓名','身高','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']\n", "filename = 'data/result_2209.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "list1 = []\n", "for k, v in dict1.items():\n", " list2 = []\n", " list2.append(k)\n", " list2.append(v['name'])\n", " \n", " for item in items:\n", " if item in v.keys():\n", " list2.append(v[item]['成绩'])\n", " elif item =='name':\n", " list2.append(v[item])\n", " else:\n", " list2.append('') \n", " list1.append(list2)\n", "filename = 'data/2022年安庆得分情况表.xlsx'\n", "wb = openpyxl.Workbook()\n", "sheet = wb.active\n", "sheet.append(title)\n", "for row in list1:\n", " sheet.append(row)\n", " \n", "wb.save(filename)" ] }, { "cell_type": "markdown", "id": "e5aa1bf4-c68c-4843-a9fb-c3fe48ff1f39", "metadata": {}, "source": [ "### 体测数据检查" ] }, { "cell_type": "markdown", "id": "27b8e925-ec99-48d4-9f89-97ce388c1b3b", "metadata": {}, "source": [ "#### 数据项目校验" ] }, { "cell_type": "code", "execution_count": null, "id": "f93c3eed-ce79-48a7-b189-3ef694f60367", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import operator\n", "\n", "filename = 'data/安庆炼化人员名单2022.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "list1 = dict1.keys()\n", "m_items = ['身高','体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','单脚站立','选择反应时','台阶指数']\n", "f_items = ['身高','体重','肺活量','握力','坐位体前屈','纵跳','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']\n", "\n", "filename = 'data/result_2209.json'\n", "dict3 = {}\n", "with open(filename,'r') as fl:\n", " dict2 = json.load(fl)\n", "\n", "for k, v in dict1.items():\n", " dict3[k] = v['sex']\n", "\n", "for k, v in dict2.items():\n", " list1 = []\n", " list1 = list(v.keys()) \n", " if dict3[k] == '男' and '一分钟仰卧起坐' in list1:\n", " print(k,v['name'],'一分钟仰卧起坐 不应出现')\n", " if dict3[k] == '女' and '俯卧撑' in list1:\n", " print(k,v['name'],'俯卧撑 不应出现')\n", " \n", " " ] }, { "cell_type": "markdown", "id": "bd58fc48-ffe9-4838-be19-5da1dc632049", "metadata": {}, "source": [ "#### 当日测试人员校验" ] }, { "cell_type": "code", "execution_count": null, "id": "a00ec014-a4e5-4f8f-9cd5-7b3bd736ad85", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "\n", "filename = '../item.json'\n", "item = {}\n", "unit = {}\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl) \n", "for k,v in dict1.items():\n", " item[k] = v\n", " \n", "filename = 'data/136_220927.csv'\n", "list1 = []\n", "re_ta = {}\n", "with open(filename,'r',newline='') as csv_file:\n", " fl = csv.reader(csv_file,delimiter=',')\n", " header = next(fl) \n", " for line in fl:\n", " #line = re.sub('[\\r\\n\\f ]{1,}', '', line)\n", " list1.append(line)\n", "for result in list1:\n", " user = str(result[4])\n", " m_item = str(result[0]) \n", " re_ta.setdefault(user,{}) \n", " re_ta[user]['name'] = str(result[6])\n", " re_ta[user]['unit'] = str(result[5])\n", " item_name = item[m_item]['name']\n", " re_ta[user].setdefault(item_name,{}) \n", " score = int(result[1])/item[m_item]['divisor'] \n", " re_ta[user][item_name]['成绩'] = f'{score} {item[m_item][\"unit\"]}'\n", " re_ta[user][item_name]['得分'] =result[2]\n", "#print(re_ta)\n", "\n", "filename = 'data/result_2209.json'\n", "with open(filename,'r') as fl:\n", " dict2 = json.load(fl)\n", "\n", "for k, v in re_ta.items():\n", " if k in dict2.keys():\n", " print(k,v['name'],'该人员已经测试!')\n", "\n" ] }, { "cell_type": "markdown", "id": "cf27c2e7-af3c-4765-af01-9326d7ebac6e", "metadata": {}, "source": [ "### 新增人员" ] }, { "cell_type": "code", "execution_count": null, "id": "80879f90-2939-44b8-8bc6-107c38c9df79", "metadata": { "tags": [] }, "outputs": [], "source": [ "import openpyxl\n", "import json\n", "\n", "\n", "wb = openpyxl.load_workbook('data/安庆新增人员220926.xlsx')\n", "sheet = wb.active\n", "# sheets = wb.sheetnames\n", "i = 0\n", "person = {}\n", "dict2 = {}\n", "for n in range(2, sheet.max_row+1): \n", " if sheet.cell(n,2).value is None:\n", " break\n", " else: \n", " code = int(sheet.cell(n, 2).value)\n", " person.setdefault(code, {})\n", " dict1 = {}\n", " xb = str(sheet.cell(n, 4).value)\n", " if xb == '1':\n", " sex = '男'\n", " elif xb =='2':\n", " sex = '女'\n", " dict1['name'] = sheet.cell(n, 3).value\n", " dict1['sex'] = sex\n", " dict1['unit'] = sheet.cell(n, 1).value\n", " dict1['id_num'] = sheet.cell(n,6).value\n", " person[code] = dict1\n", "filename = 'data/安庆炼化人员名单2022.json'\n", "with open(filename, 'r') as fl:\n", " dict2 = json.load(fl)\n", "for k, v in person.items():\n", " if k in dict2.keys():\n", " print('该编号人员已存在!')\n", " else:\n", " dict2[k] = v\n", " i +=1\n", "if i >1:\n", " with open(filename, 'w') as fl:\n", " json.dump(dict2, fl, ensure_ascii=False)\n", " print('ok')\n", "else:\n", " print('无新增人员!')" ] }, { "cell_type": "markdown", "id": "5178b8fc-408a-4d95-915c-2164f2596bc3", "metadata": {}, "source": [ "### 修改人员部门" ] }, { "cell_type": "code", "execution_count": null, "id": "6e19f626-9732-4426-9124-b6f4ef5542bc", "metadata": { "tags": [] }, "outputs": [], "source": [ "import openpyxl\n", "import json\n", "\n", "\n", "wb = openpyxl.load_workbook('data/2022年安庆石化体测数据调整情况0921.xlsx')\n", "sheet = wb.active\n", "# sheets = wb.sheetnames\n", "data1 =list(sheet.values)\n", "del data1[:2]\n", "\n", "filename = 'data/安庆炼化人员名单2022.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "for item in data1:\n", " if str(item[0]) in dict1.keys():\n", " dict1[str(item[0])]['unit'] = item[4]\n", " print(item[0],item[1],'已修改')\n", " else:\n", " print(item[0],item[1],'不存在!')\n", "with open(filename, 'w') as fl:\n", " json.dump(dict1, fl, ensure_ascii=False)\n", "print('ok') " ] }, { "cell_type": "markdown", "id": "7377e5d1-815d-4eb8-9bfa-9ca3a210a6e0", "metadata": {}, "source": [ "### 获取人员测试成绩" ] }, { "cell_type": "code", "execution_count": null, "id": "6e738a0d-ffbf-4a73-9021-d024609a6eb4", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import time\n", "import csv\n", "\n", "filename = '../item.json'\n", "item = {}\n", "unit = {}\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl) \n", "for k,v in dict1.items():\n", " item[k] = v\n", "#SQL语句为:\n", "# SELECT a.item_id,a.performance,a.score,a.date AS DATE1,a.avatar_id,b.unit,b.name FROM places_result AS a,_zgshhgxs AS b WHERE a.place_id=135 AND a.avatar_id=b.id AND a.avatar_id < 4999\n", "\n", "re_ta = {}\n", "dict1 = {}\n", "list1 = []\n", "#print(\"\\n运动项目信息:\")\n", "filename = 'data/136_2209.csv'\n", "with open(filename,'r',newline='') as csv_file:\n", " fl = csv.reader(csv_file,delimiter=',')\n", " header = next(fl) \n", " for line in fl:\n", " #line = re.sub('[\\r\\n\\f ]{1,}', '', line)\n", " list1.append(line)\n", "#print(list1)\n", "for result in list1:\n", " user = str(result[4])\n", " m_item = str(result[0]) \n", " re_ta.setdefault(user,{}) \n", " re_ta[user]['name'] = str(result[6])\n", " re_ta[user]['unit'] = str(result[5])\n", " item_name = item[m_item]['name']\n", " re_ta[user].setdefault(item_name,{}) \n", " score = int(result[1])/item[m_item]['divisor'] \n", " re_ta[user][item_name]['成绩'] = f'{score} {item[m_item][\"unit\"]}'\n", " re_ta[user][item_name]['得分'] =result[2]\n", "filename = 'data/result_2209.json'\n", "with open(filename,'w') as fl:\n", " json.dump(re_ta, fl) \n", "print('ok')" ] }, { "cell_type": "markdown", "id": "540b0225-8651-4b37-8bc8-3899efbd71fb", "metadata": {}, "source": [ "### 比照往年年度人员信息" ] }, { "cell_type": "code", "execution_count": null, "id": "bed95c43-e26c-41d3-8b1c-516818b25bbf", "metadata": {}, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "\n", "filename = 'data/result_安庆.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "filename = 'data/安庆炼化人员名单2022.json'\n", "with open(filename,'r') as fl:\n", " dict3 = json.load(fl)\n", "\n", "dict2 = {}\n", "for k, v in dict3.items():\n", " dict2[v['id_num']] = [v['name'],k,v['unit'],v['sex']]\n", "\n", "dict3 = {}\n", "for k, v in dict1.items():\n", " if 'id' in v.keys():\n", " if v['id'] in dict2.keys():\n", " v['old_code'] = int(k)\n", " code = int(dict2[v['id']][1])\n", " dict3.setdefault(code, {})\n", " dict3[code] = v \n", "filename = 'data/安庆2021.json'\n", "with open(filename,'w') as fl:\n", " json.dump(dict3, fl,ensure_ascii=False) \n", "print('ok')" ] }, { "cell_type": "code", "execution_count": null, "id": "46ccfb31-7cd8-4cc4-8d70-18a14f7943e8", "metadata": {}, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "\n", "filename = 'data/result_安庆.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "dict2 = {}\n", "filename = 'data/安庆石化2022.xlsx'\n", "wb = openpyxl.load_workbook(filename)\n", "sheet = wb.active\n", "data1 =list(sheet.values)\n", "del data1[0]\n", "for item in data1:\n", " id = item[5]\n", " dict2[id] = [item[2],item[1],item[0],item[3],item[4]]\n", "#print(dict2)\n", "dict3 = {}\n", "for k, v in dict1.items():\n", " if 'id' in v.keys():\n", " if v['id'] in dict2.keys():\n", " v['old_code'] = int(k)\n", " code = int(dict2[v['id']][1])\n", " dict3.setdefault(code, {})\n", " dict3[code] = v \n", "filename = 'data/安庆2021.json'\n", "with open(filename,'w') as fl:\n", " json.dump(dict3, fl,ensure_ascii=False) \n", "print('ok')" ] }, { "cell_type": "markdown", "id": "a9bdeab3-5ddf-4f80-90fb-9301a2ff064a", "metadata": {}, "source": [ "### 比照人员两年成绩" ] }, { "cell_type": "markdown", "id": "2b63fff4-3b1f-4a4f-b32a-4508736b88a6", "metadata": {}, "source": [ "#### 比照两年全部成绩" ] }, { "cell_type": "code", "execution_count": null, "id": "351aae7c-a3aa-4c22-99b9-701cf2395a85", "metadata": {}, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "\n", "filename = 'data/安庆2021.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "list1 = dict1.keys()\n", "items = ['身高','体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']\n", "title = ['编号','姓名','部门','身高','体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数','身高','体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']\n", "filename = 'data/result_2209.json'\n", "with open(filename,'r') as fl:\n", " dict2 = json.load(fl)\n", "list4 = []\n", "for k, v in dict2.items():\n", " if k in list1:\n", " list2 = [k,v['name'],v['unit']]\n", " list3 = []\n", " for item in items:\n", " # 获取2022年成绩\n", " if item in v.keys():\n", " list2.append(v[item]['成绩']) \n", " \n", " else:\n", " list2.append('')\n", " # 获取2021年成绩\n", " if item in dict1[k].keys():\n", " list3.append(dict1[k][item]['成绩']) \n", " else:\n", " list3.append('')\n", " for cj in list3:\n", " list2.append(cj) \n", " list4.append(list2)\n", "filename = 'data/安庆石化成绩对照220921.xlsx'\n", "wb = openpyxl.Workbook()\n", "sheet = wb.active\n", "sheet.append(title)\n", "for row in list4:\n", " sheet.append(row)\n", " \n", "wb.save(filename) " ] }, { "cell_type": "markdown", "id": "d6d6952f-2944-4cb4-8403-d83d5f0b4a9b", "metadata": {}, "source": [ "#### 比照两年单项成绩" ] }, { "cell_type": "code", "execution_count": null, "id": "28199ab8-ea9d-4012-ba75-9437fcdd91aa", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "\n", "filename = 'data/安庆2021.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "list1 = dict1.keys()\n", "items = ['身高','体重']\n", "title = ['编号','姓名','部门','22年身高','22年体重','21年身高','21年体重','身高差','体重差']\n", "filename = 'data/result_2209.json'\n", "with open(filename,'r') as fl:\n", " dict2 = json.load(fl)\n", "list4 = []\n", "for k, v in dict2.items():\n", " if k in list1:\n", " list2 = [k,v['name'],v['unit']]\n", " list3 = []\n", " for item in items:\n", " # 获取2022年成绩\n", " if item in v.keys(): \n", " list2.append(v[item]['成绩'].split()[0]) \n", " else:\n", " list2.append('')\n", " # 获取2021年成绩\n", " if item in dict1[k].keys():\n", " list3.append(dict1[k][item]['成绩']) \n", " else:\n", " list3.append('')\n", " for cj in list3:\n", " if cj != '':\n", " list2.append(cj.split()[0]) \n", " \n", " list4.append(list2)\n", "filename = 'data/安庆石化成绩对照220927.xlsx'\n", "wb = openpyxl.Workbook()\n", "sheet = wb.active\n", "sheet.append(title)\n", "for row in list4:\n", " sheet.append(row)\n", " \n", "wb.save(filename) " ] }, { "cell_type": "markdown", "id": "b0c3d2bd-85ad-4109-be26-81f0b7b374f0", "metadata": {}, "source": [ "### 调整人员部门" ] }, { "cell_type": "code", "execution_count": null, "id": "5e05ac13-4ed7-4b36-bd76-77283feecfbb", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "\n", "\n", "filename = '../data/安庆石化部门调整.xlsx'\n", "wb = openpyxl.load_workbook(filename)\n", "sheet = wb.active\n", "data1 =list(sheet.values)\n", "del data1[:2]\n", "filename = '../data/安庆炼化人员名单2022.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "i = 1\n", "for item in data1:\n", " code = str(item[0])\n", " name = item[1]\n", " unit = item[4]\n", " if dict1[code]['name'] == name:\n", " #print(i,name,unit)\n", " dict1[code]['unit'] = unit\n", "with open(filename,'w') as fl:\n", " json.dump(dict1, fl,ensure_ascii=False) \n", "print('ok') \n", " " ] }, { "cell_type": "markdown", "id": "7ec85f17-5dbb-4929-963e-724f0336cc9f", "metadata": {}, "source": [ "### 删除人员" ] }, { "cell_type": "code", "execution_count": 11, "id": "bca57e0d-918b-49d2-ac01-6ad17f0c29a0", "metadata": { "execution": { "iopub.execute_input": "2022-10-11T07:42:01.912946Z", "iopub.status.busy": "2022-10-11T07:42:01.911758Z", "iopub.status.idle": "2022-10-11T07:42:02.064802Z", "shell.execute_reply": "2022-10-11T07:42:02.061564Z", "shell.execute_reply.started": "2022-10-11T07:42:01.912831Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "4129 已删除!\n", "4165 已删除!\n", "ok\n" ] } ], "source": [ "import json\n", "\n", "filename = '../data/安庆炼化人员名单2022.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "list1 = [4129,4165]\n", "for item in list1:\n", " if str(item) in dict1.keys():\n", " del dict1[str(item)] \n", " print(item,'已删除!')\n", "with open(filename,'w') as fl:\n", " json.dump(dict1, fl,ensure_ascii=False) \n", "print('ok') " ] }, { "cell_type": "markdown", "id": "16b2e608-23ea-493d-a8dc-7f0dc1344913", "metadata": {}, "source": [ "### 体测报告分组" ] }, { "cell_type": "code", "execution_count": null, "id": "14ffd855-4af6-4329-9925-b28d3f0028ef", "metadata": { "tags": [] }, "outputs": [], "source": [ "import os,sys,shutil\n", "import json\n", "import math\n", "\n", "fi_xls = '../file/安庆石化2022.xlsx'\n", "fi_name = {}\n", "fi_path = '../file/220930'\n", "old = []\n", "new = []\n", "dict1 = {}\n", "depart = set()\n", "\n", "filename = '../data/安庆炼化人员名单2022.json'\n", "with open(filename,'r') as fl:\n", " dict2 = json.load(fl)\n", "for k, v in dict2.items():\n", " depart.add(v['unit']) \n", " dict1[int(k)] = [v['name'],v['unit']]\n", " \n", "# 创建部门办公室 \n", "\n", "\n", "m_path = '../file/220930/new'\n", "for pn in depart:\n", " if not os.path.exists(m_path + '/' + pn):\n", " os.mkdir(m_path + '/' + pn)\n", "#print(dict1)\n", "\n", "\n", "fl=os.listdir(fi_path)\n", "for fn in fl:\n", " if os.path.isfile(fi_path + '/' + fn):\n", " ofn = int(fn.split('.')[0])\n", " old.append(ofn)\n", " #print(fn)\n", "old.sort()\n", " #print(str(nfn)+'.pdf')\n", "\n", "for n in old:\n", " \n", " o_name = f'{fi_path}/{n}.pdf'\n", " n_name = f'{fi_path}/new/{dict1[n][1]}/{str(n).rjust(5,\"0\")}-{dict1[n][0]}.pdf'\n", " if not os.path.exists(n_name):\n", " shutil.copyfile(o_name,n_name)\n", " print(n_name)" ] }, { "cell_type": "markdown", "id": "f623d291-8d66-4246-a34f-a051115596ef", "metadata": { "tags": [] }, "source": [ "## 体检报告数据管理" ] }, { "cell_type": "markdown", "id": "38261495-3aa4-4572-a6e1-4e300c29be66", "metadata": {}, "source": [ "### 从excel表导入数据" ] }, { "cell_type": "code", "execution_count": null, "id": "31a47b5f-f48e-4d6d-af8f-dd5383b5c5dd", "metadata": { "tags": [] }, "outputs": [], "source": [ "import os\n", "import openpyxl\n", "import json\n", "\n", "fi_path = 'data/安庆/'\n", "sheet_list = ['一览表', 'Ⅱ级高血压、Ⅲ级高血压', '心电图异常']\n", "dict1 = {}\n", "fl=glob.glob(f'{fi_path}*.xlsx')\n", "for fn in fl:\n", " print(fn) \n", " wb = openpyxl.load_workbook(fn)\n", " wb_name = os.path.basename(fn).split('.')[0]\n", " dict1.setdefault(wb_name,{})\n", " for sheet in wb.sheetnames:\n", " ws = wb[sheet]\n", " if sheet == '一览表':\n", " dict1[wb_name].setdefault(sheet,{})\n", " for n in range(2,ws.max_row+1):\n", " dict2 = {}\n", " m_name = ws.cell(n,4).value\n", " dict1[wb_name][sheet].setdefault(m_name,{})\n", " dict2['部门'] = ws.cell(n,2).value\n", " dict2['工号'] = ws.cell(n,3).value\n", " dict2['性别'] = ws.cell(n,5).value\n", " dict2['年龄'] = ws.cell(n,6).value\n", " dict2['接害工龄'] = ws.cell(n,7).value\n", " dict2['工种'] = ws.cell(n,8).value\n", " dict2['危害因素'] = ws.cell(n,9).value\n", " dict2['在岗类型'] = ws.cell(n,10).value\n", " dict2['体检结果'] = ws.cell(n,11).value\n", " dict2['检查结果'] = ws.cell(n,12).value\n", " dict1[wb_name][sheet][m_name] = dict2\n", " \n", " if sheet == 'Ⅱ级高血压、Ⅲ级高血压':\n", " dict1[wb_name].setdefault(sheet,{})\n", " for n in range(2,ws.max_row+1):\n", " dict2 = {}\n", " m_name = ws.cell(n,4).value\n", " dict1[wb_name][sheet].setdefault(m_name,{})\n", " dict2['工号'] = ws.cell(n,3).value\n", " dict2['性别'] = ws.cell(n,5).value\n", " dict2['年龄'] = ws.cell(n,6).value\n", " dict2['接害工龄'] = ws.cell(n,7).value \n", " dict2['总结'] = ws.cell(n,11).value\n", " dict2['诊断'] = ws.cell(n,12).value\n", " dict1[wb_name][sheet][m_name] = dict2\n", " \n", " if sheet == '心电图异常':\n", " dict1[wb_name].setdefault(sheet,{})\n", " for n in range(2,ws.max_row+1):\n", " dict2 = {}\n", " m_name = ws.cell(n,4).value\n", " dict1[wb_name][sheet].setdefault(m_name,{})\n", " dict2['工号'] = ws.cell(n,3).value\n", " dict2['性别'] = ws.cell(n,5).value\n", " dict2['年龄'] = ws.cell(n,6).value\n", " dict2['接害工龄'] = ws.cell(n,7).value \n", " dict2['总结'] = ws.cell(n,11).value\n", " dict2['诊断'] = ws.cell(n,12).value\n", " dict2['备注'] = ws.cell(n,14).value\n", " dict1[wb_name][sheet][m_name] = dict2\n", " \n", " wb.close()\n", "with open('data/安庆体检报告.json','w') as fl:\n", " json.dump(dict1,fl) \n" ] }, { "cell_type": "markdown", "id": "9a564e48-95e3-4255-b70e-e845c59edfaf", "metadata": {}, "source": [ "### 体检结果分解" ] }, { "cell_type": "code", "execution_count": null, "id": "56a0804b-8626-4c52-8ff4-29d4322b1bdc", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import re\n", "with open('data/安庆体检报告.json','r') as fl:\n", " dict1 = json.load(fl) \n", "\n", "mo1 = r'[一二三四五六七八九十]、'\n", "list_ks = set()\n", "#dict2 = dict1['丙烯腈装置']['一览表']\n", "#print(dict2)\n", "for k, v in dict1.items():\n", " print(k)\n", " for k1, v1 in v['一览表'].items():\n", " if v1['体检结果']:\n", " ss = v1['体检结果']\n", " \n", " list1 = re.split(mo1,ss)\n", " if '' in list1:\n", " list1.remove('')\n", " for item in list1:\n", " list_ks.add(item.split('_x000D_')[0])\n", " \n", "print(list_ks)\n", " \n" ] }, { "cell_type": "code", "execution_count": null, "id": "54515a61-6711-44a8-9959-8a25d21ae8a6", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import re\n", "with open('data/安庆体检报告.json','r') as fl:\n", " dict1 = json.load(fl) \n", "\n", "mo1 = r'[一二三四五六七八九十]、'\n", "list_ks = set()\n", "dict2 = dict1['丙烯腈装置']['一览表']\n", "dict3 = {}\n", "i = 1\n", "#print(dict2)\n", "for k, v in dict2.items():\n", " dict3.setdefault(i,{})\n", " ss = v['体检结果']\n", " list1 = re.split(mo1,ss)\n", " list1.remove('')\n", " for item in list1:\n", " list2 = item.split('_x000D_')\n", " if '' in list2:\n", " list2.remove('')\n", " list_ks.add(list2[0])\n", " dict3[i][item.split('_x000D_')[0]] =list2[1:]\n", " i+=1\n", "print(list_ks)\n", "#print(dict3)\n", "for k, v in dict3.items():\n", " for k1, v1 in v.items():\n", " if k1 =='检验科':\n", " for item in v1:\n", " if '【' in item:\n", " v1.remove(item)\n", " print(v1)\n", " if k1 =='彩超检查室':\n", " for item in v1:\n", " if '【' in item:\n", " v1.remove(item)\n", " #print(v1)\n", " if k1 =='心电图检查室':\n", " for item in v1:\n", " if '【' in item:\n", " v1.remove(item)\n", " #print(v1)\n", " if k1 =='肺功能检查室':\n", " for item in v1:\n", " if '【' in item:\n", " v1.remove(item)\n", " #print(v1)\n", " if k1 =='碳14尿素':\n", " for item in v1:\n", " if '【' in item:\n", " v1.remove(item)\n", " #print(v1)" ] }, { "cell_type": "markdown", "id": "5968c4b2-d866-4d91-b3e5-f0636420ba9a", "metadata": {}, "source": [ "### 病症统计(Ⅱ级高血压、Ⅲ级高血压、心电图异常)" ] }, { "cell_type": "code", "execution_count": null, "id": "96d9656e-7f63-4981-8272-21e1ef051287", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import re\n", "with open('data/安庆体检报告.json','r') as fl:\n", " dict1 = json.load(fl) \n", "dict3 = {}\n", "for k, v in dict1.items():\n", " bm = k\n", " dict2 = {}\n", " if 'Ⅱ级高血压、Ⅲ级高血压' in v.keys():\n", " for k1, v1 in v['Ⅱ级高血压、Ⅲ级高血压'].items():\n", " mbz = 'Ⅱ级高血压、Ⅲ级高血压'\n", " dict2.setdefault(k1,{})\n", " dict2[k1]['工号'] = v1['工号']\n", " dict2[k1]['性别'] = v1['性别']\n", " dict2[k1]['年龄'] = v1['年龄']\n", " dict2[k1]['接害工龄'] = v1['接害工龄']\n", " dict2[k1].setdefault(mbz,{})\n", " dict2[k1][mbz]['总结'] = v1['总结']\n", " dict2[k1][mbz]['诊断'] = v1['诊断']\n", " if '心电图异常' in v.keys():\n", " for k1, v1 in v['心电图异常'].items():\n", " mbz = '心电图异常'\n", " dict2.setdefault(k1,{})\n", " dict2[k1]['工号'] = v1['工号']\n", " dict2[k1]['性别'] = v1['性别']\n", " dict2[k1]['年龄'] = v1['年龄']\n", " dict2[k1]['接害工龄'] = v1['接害工龄']\n", " dict2[k1].setdefault(mbz,{})\n", " dict2[k1][mbz]['总结'] = v1['总结']\n", " dict2[k1][mbz]['诊断'] = v1['诊断']\n", " if '备注' in v1.keys():\n", " dict2[k1][mbz]['备注'] = v1['备注']\n", " if len(dict2) >0:\n", " dict3[k] = dict2\n", "with open('data/安庆体检报告_人员整理.json','w') as fl:\n", " json.dump(dict3,fl) \n", " \n" ] }, { "cell_type": "markdown", "id": "30225b10-4307-4617-a274-cce8771e8983", "metadata": {}, "source": [ "### 病症筛选(Ⅱ级高血压、Ⅲ级高血压、心电图异常)" ] }, { "cell_type": "code", "execution_count": null, "id": "d4867b96-e7ba-420c-9b6d-8bc50eb936ae", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import re\n", "with open('data/安庆体检报告_人员整理.json','r') as fl:\n", " dict1 = json.load(fl) \n", "mo1 = r'心电图结论:(.*?)_x000D_'\n", "mo =r'血压:(.*?)_x000D_'\n", "mo2 = '(.?)级高血压'\n", "dict2 = {}\n", "\n", "for k, v in dict1.items():\n", " bm = k\n", " dict2.setdefault(bm,{})\n", " for k1, v1 in v.items():\n", " dict2[bm].setdefault(k1,{})\n", " dict2[bm][k1]['工号'] = v1['工号']\n", " dict2[bm][k1]['性别'] = v1['性别']\n", " if 'Ⅱ级高血压、Ⅲ级高血压' in v1.keys():\n", " \n", " s = v1['Ⅱ级高血压、Ⅲ级高血压']['诊断']\n", " if '级高血压' in s:\n", " list2 = re.search( mo2, s)\n", " dict2[bm][k1]['高血压'] = [list2.group(1)]\n", " ss = v1['Ⅱ级高血压、Ⅲ级高血压']['总结']\n", " if '血压:' in ss:\n", " list1 = re.search( mo, ss)\n", " dict2[bm][k1]['高血压'].append(list1.group(1))\n", " else:\n", " dict2[bm][k1]['高血压'].append('无血压数据')\n", " if '心电图异常' in v1.keys():\n", " dict2[bm][k1].setdefault('心电图',[])\n", " ss = v1['心电图异常']['总结']\n", " if '心电图结论:' in ss:\n", " list1 = re.search( mo1, ss)\n", " dict2[bm][k1]['心电图'] = [list1.group(1)]\n", " #print(k,k1,list1.group(1),list2.group(1))\n", " else:\n", " dict2[bm][k1]['心电图'].append(v1['心电图异常']['备注'])\n", "print(len(dict2))\n", "with open('data/安庆体检报告_人员统计.json','w') as fl:\n", " json.dump(dict2,fl) " ] }, { "cell_type": "markdown", "id": "183524e5-61ee-48a9-87f6-f07a78b88504", "metadata": {}, "source": [ "### 病症导出至Excel" ] }, { "cell_type": "code", "execution_count": null, "id": "c0aa1258-a5f9-44c5-a959-ab29a053c8a4", "metadata": { "tags": [] }, "outputs": [], "source": [ "import openpyxl\n", "import json\n", "\n", "list1 = []\n", "with open('data/安庆体检报告_人员统计.json','r') as fl:\n", " dict1 = json.load(fl) \n", "for k, v in dict1.items():\n", " bm =k\n", " for k1, v1 in v.items():\n", " #print(bm,k1)\n", " list2 = []\n", " xm = k1\n", " if '工号' in v1.keys():\n", " gh = v1['工号']\n", " else:\n", " gh = ''\n", " sex = v1['性别']\n", " if '高血压' in v1.keys():\n", " lx = v1['高血压'][0]+'级高血压'\n", " xyz = v1['高血压'][1]\n", " else:\n", " lx = ''\n", " xyz = ''\n", " if '心电图' in v1.keys():\n", " xdt = v1['心电图'][0]\n", " else:\n", " xdt = ''\n", " list2 = [bm,xm,gh,sex,lx,xyz,xdt]\n", " list1.append(list2)\n", "#print(list1) \n", "\n", "filename = 'data/安庆体检情况表.xlsx'\n", "wb = openpyxl.Workbook()\n", "sheet = wb.active\n", "title = ['部门','员工姓名','工号','性别','高血压级别','血压值','心电图异常情况']\n", "sheet.append(title)\n", "for row in list1:\n", " sheet.append(row)\n", "\n", "\n", "wb.save(filename)" ] }, { "cell_type": "code", "execution_count": null, "id": "f2f2f206-2558-4cc3-9519-c4c677b71237", "metadata": {}, "outputs": [], "source": [ "import json\n", "filename = 'data/安庆2021.json'\n", "item = {}\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl) \n", "\n", "print(len(dict1))" ] }, { "cell_type": "markdown", "id": "fbb13d70-6601-4421-8deb-26e717c37a8c", "metadata": {}, "source": [ "## 体质问卷管理" ] }, { "cell_type": "markdown", "id": "7e0fe102-69d4-425c-bc1f-9a26cc974d9d", "metadata": {}, "source": [ "### 问卷人员导入" ] }, { "cell_type": "code", "execution_count": 7, "id": "714d4a20-9ca0-4439-880b-f68de8c0e2fb", "metadata": { "execution": { "iopub.execute_input": "2023-10-18T04:28:34.758506Z", "iopub.status.busy": "2023-10-18T04:28:34.757933Z", "iopub.status.idle": "2023-10-18T04:28:34.828585Z", "shell.execute_reply": "2023-10-18T04:28:34.827501Z", "shell.execute_reply.started": "2023-10-18T04:28:34.758452Z" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "ok\n" ] } ], "source": [ "import openpyxl\n", "import json\n", "\n", "\n", "wb = openpyxl.load_workbook('data/职工健康提升项目志愿者报名表(汇总).xlsx')\n", "sheet = wb.active\n", "# sheets = wb.sheetnames\n", "person = {}\n", "\n", "for n in range(3, sheet.max_row+1):\n", " code = int(sheet.cell(n, 1).value)\n", " person.setdefault(code, {})\n", " dict1 = {}\n", " dict1['name'] = sheet.cell(n, 4).value\n", " dict1['sex'] = sheet.cell(n, 5).value\n", " dict1['unit'] = sheet.cell(n, 2).value\n", " dict1['job'] = sheet.cell(n, 3).value\n", " dict1['age'] = int(sheet.cell(n, 6).value)\n", " dict1['phone'] = str(sheet.cell(n,7).value)\n", " dict1['note'] = sheet.cell(n,8).value\n", " person[code] = dict1\n", "filename = 'data/安庆职工健康提升志愿者.json'\n", "with open(filename, 'w') as fl:\n", " json.dump(person, fl, ensure_ascii=False)\n", "print('ok')" ] }, { "cell_type": "markdown", "id": "e8774dfb-d9f5-44af-a118-4a106ceac9fc", "metadata": {}, "source": [ "### 导入问卷信息" ] }, { "cell_type": "code", "execution_count": 24, "id": "dcdd18b3-d7b7-49b1-b148-c2ea9a7799ff", "metadata": { "execution": { "iopub.execute_input": "2023-10-23T01:47:20.637431Z", "iopub.status.busy": "2023-10-23T01:47:20.637008Z", "iopub.status.idle": "2023-10-23T01:47:20.684289Z", "shell.execute_reply": "2023-10-23T01:47:20.683177Z", "shell.execute_reply.started": "2023-10-23T01:47:20.637394Z" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3\n" ] } ], "source": [ "import json\n", "import csv\n", "import openpyxl\n", "\n", "filename = 'data/安庆职工健康提升志愿者.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl) \n", "\n", "wj = {'psy_0556_sh':'心理问卷','tcm_0556_sh':'中医问卷','spine_0556_sh':'脊柱问卷'}\n", "wj_dm = {'psy_0556_sh':0,'tcm_0556_sh':1,'spine_0556_sh':2}\n", "list1 = []\n", "re_ta = {}\n", "filename = 'data/Survey_20231023.csv'\n", "with open(filename,'r',newline='') as csv_file:\n", " fl = csv.reader(csv_file,delimiter=',')\n", " header = next(fl) \n", " for line in fl:\n", " #line = re.sub('[\\r\\n\\f ]{1,}', '', line)\n", " list1.append(line)\n", "#print(list1)\n", "for result in list1:\n", " item = str(result[1])\n", " re_ta.setdefault(item,[])\n", " re_ta[item].append(result[2])\n", "print(len(re_ta))\n", "\n", "tj = {}\n", "for k ,v in dict1.items():\n", " phone = v['phone']\n", " tj.setdefault(k, [0,0,0])\n", " for k1,v1 in re_ta.items():\n", " if phone in v1:\n", " tj[k][wj_dm[k1]] = 1\n", "list1 = []\n", "for k, v in tj.items():\n", " list2 = []\n", " list2.append(k)\n", " list2.append(dict1[k]['name'])\n", " list2.append(dict1[k]['phone'])\n", " for item in v:\n", " list2.append(item)\n", " list1.append(list2)\n", " \n", "filename = 'data/安庆职工健康提升问卷情况表.xlsx'\n", "wb = openpyxl.Workbook()\n", "sheet = wb.active\n", "title = ['编号','员工姓名','手机号码','心理','中医','脊柱']\n", "sheet.append(title)\n", "for row in list1:\n", " sheet.append(row)\n", "\n", "\n", "wb.save(filename) \n", " " ] }, { "cell_type": "markdown", "id": "8bc929e2-38f1-4dbd-820e-65d92b59ab26", "metadata": {}, "source": [ "### 导统计问卷新增手机号码" ] }, { "cell_type": "code", "execution_count": 25, "id": "ea4fffc4-3c6e-4f85-819f-52f969e04dd7", "metadata": { "execution": { "iopub.execute_input": "2023-10-23T01:48:05.387619Z", "iopub.status.busy": "2023-10-23T01:48:05.387331Z", "iopub.status.idle": "2023-10-23T01:48:05.409370Z", "shell.execute_reply": "2023-10-23T01:48:05.407170Z", "shell.execute_reply.started": "2023-10-23T01:48:05.387594Z" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "13865166211\n", "15905566828\n", "18055691637\n", "13855602427\n", "13966613066\n", "18755696791\n", "18055696268\n", "15856585658\n", "13966607917\n", "13855640093\n", "18155688687\n" ] } ], "source": [ "import json\n", "import csv\n", "import openpyxl\n", "\n", "filename = 'data/安庆职工健康提升志愿者.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl) \n", "\n", "phone = set()\n", "phone1 = set()\n", "for k,v in dict1.items():\n", " phone.add(v['phone'])\n", "\n", "filename = 'data/Survey_20231018.csv'\n", "with open(filename,'r',newline='') as csv_file:\n", " fl = csv.reader(csv_file,delimiter=',')\n", " header = next(fl) \n", " for line in fl:\n", " #line = re.sub('[\\r\\n\\f ]{1,}', '', line)\n", " list1.append(line)\n", "#print(list1)\n", "for result in list1:\n", " if result[2] not in phone:\n", " phone1.add(result[2])\n", "for item in phone1:\n", " print(item)" ] }, { "cell_type": "code", "execution_count": null, "id": "37bf232e-7db1-40a8-b8d6-4a182f839848", "metadata": {}, "outputs": [], "source": [ "import json\n", "import csv\n", "import openpyxl\n", "\n", "filename = 'data/安庆职工健康提升志愿者.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl) \n", "\n", "phone = set()\n", "phone1 = set()\n", "for k,v in dict1.items():\n", " phone.add(v['phone'])\n", "\n", "filename = 'data/Survey_20231018.csv'\n", "with open(filename,'r',newline='') as csv_file:\n", " fl = csv.reader(csv_file,delimiter=',')\n", " header = next(fl) \n", " for line in fl:\n", " #line = re.sub('[\\r\\n\\f ]{1,}', '', line)\n", " list1.append(line)\n", "#print(list1)\n", "for result in list1:\n", " if result[2] not in phone:\n", " phone1.add(result[2])\n", "for item in phone1:\n", " print(item)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.10.12" } }, "nbformat": 4, "nbformat_minor": 5 }