{ "cells": [ { "cell_type": "markdown", "id": "ce7a7798-b8b7-4564-9e17-3e9c2d4565d8", "metadata": {}, "source": [ "## 体测人员导入" ] }, { "cell_type": "code", "execution_count": 8, "id": "270e8c57-36d3-476c-8c50-4d8bc38a918a", "metadata": { "execution": { "iopub.execute_input": "2025-11-17T01:38:45.210547Z", "iopub.status.busy": "2025-11-17T01:38:45.209877Z", "iopub.status.idle": "2025-11-17T01:38:45.422897Z", "shell.execute_reply": "2025-11-17T01:38:45.422462Z", "shell.execute_reply.started": "2025-11-17T01:38:45.210491Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1295 ok\n" ] } ], "source": [ "import openpyxl\n", "import json\n", "from datetime import date\n", "\n", "wb = openpyxl.load_workbook('data/沧州炼化人员.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(str(code), {})\n", " dict1 = {}\n", " dict1['name'] = sheet.cell(n, 4).value\n", " dict1['sex'] = sheet.cell(n, 5).value\n", " dict1['birth'] = str(sheet.cell(n, 6).value).replace('/','-').split(' ')[0] \n", " dict1['unit'] = sheet.cell(n, 3).value\n", " if sheet.cell(n, 7).value is not None:\n", " dict1['phone'] = str(sheet.cell(n, 7).value)\n", " person[str(code)] = dict1\n", "filename = 'data/沧州炼化人员.json'\n", "with open(filename, 'w') as fl:\n", " json.dump(person, fl, ensure_ascii=False)\n", "print(len(person),'ok')" ] }, { "cell_type": "code", "execution_count": null, "id": "6c5f1858-e01e-4cf0-85b1-2019a37c3b37", "metadata": {}, "outputs": [], "source": [ "import openpyxl\n", "import json\n", "from datetime import date\n", "\n", "wb = openpyxl.load_workbook('data/沧州炼化人员.xlsx')\n", "sheet = wb.active\n", "# sheets = wb.sheetnames\n", "person = {}\n", "\n", "for n in range(2, sheet.max_row+1):\n", " code = sheet.cell(n, 2).value\n", " person.setdefault(str(code), {})\n", " dict1 = {}\n", " dict1['name'] = sheet.cell(n, 4).value\n", " dict1['sex'] = sheet.cell(n, 5).value\n", " dict1['birth'] = str(sheet.cell(n, 6).value).replace('/','-').split(' ')[0] \n", " dict1['unit'] = sheet.cell(n, 3).value\n", " if sheet.cell(n, 7).value is not None:\n", " dict1['phone'] = str(sheet.cell(n, 7).value)\n", " person[str(code)] = dict1\n", "filename = 'data/沧州炼化人员.json'\n", "with open(filename, 'w') as fl:\n", " json.dump(person, fl, ensure_ascii=False)\n", "print(len(person),'ok')" ] }, { "cell_type": "code", "execution_count": 6, "id": "829d9460-a14e-4689-a7c4-d00bbd8c2e32", "metadata": { "execution": { "iopub.execute_input": "2025-11-16T05:42:54.899442Z", "iopub.status.busy": "2025-11-16T05:42:54.898753Z", "iopub.status.idle": "2025-11-16T05:42:55.048242Z", "shell.execute_reply": "2025-11-16T05:42:55.047690Z", "shell.execute_reply.started": "2025-11-16T05:42:54.899375Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[['1553904', '孙建国', '物资采购中心'], ['1553904', '张巍', '应急救援中心']]\n" ] } ], "source": [ "import openpyxl\n", "import json\n", "from datetime import date\n", "\n", "wb = openpyxl.load_workbook('data/沧州炼化人员.xlsx')\n", "sheet = wb.active\n", "# sheets = wb.sheetnames\n", "person = {}\n", "list1 = []\n", "list2 = []\n", "for n in range(2, sheet.max_row+1):\n", " code = sheet.cell(n, 2).value\n", " if code not in list1:\n", " list1.append(code)\n", " else:\n", " list2.append(code)\n", "list3 = []\n", "for n in range(2, sheet.max_row+1):\n", " code = sheet.cell(n, 2).value\n", " if code in list2:\n", " list4 = [code,sheet.cell(n, 4).value,sheet.cell(n, 3).value]\n", " list3.append(list4)\n", "print(list3)\n", "filename = 'data/沧州炼化编号重复人员.xlsx'\n", "wb = openpyxl.Workbook()\n", "sheet = wb.active\n", "\n", "for row in list3:\n", " sheet.append(row)\n", " \n", "wb.save(filename)" ] }, { "cell_type": "markdown", "id": "b4f7023f-127c-4c47-a8e2-78922fbcd975", "metadata": {}, "source": [ "## 生成读卡系统文件" ] }, { "cell_type": "code", "execution_count": null, "id": "7b6c8cb8-50ab-4b59-ac9a-6afb3db61476", "metadata": {}, "outputs": [], "source": [ "import json\n", "\n", "filename = 'data/沧州炼化人员.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "list1 = []\n", "for k, v in dict1.items():\n", " dict2 = {}\n", " #if dict1['sex'] =='男':\n", " # sex = 1\n", " \n", " dict2 = {'id':k,'name':v['name'],'gender':v['sex'],'birth':v['birth'],'unit':v['unit']}\n", " list1.append(dict2)\n", "json_data = json.dumps(list1,ensure_ascii=False, indent=4) \n", "\n", "# 将 json 数据写入文件\n", "with open(\"data/card_沧州炼化人员.json\", \"w\",encoding = 'utf-8') as file:\n", " file.write(json_data) \n", "print(len(list1),'ok')" ] }, { "cell_type": "markdown", "id": "f9ef800a-b760-4933-b7a4-c69edef593d0", "metadata": {}, "source": [ "## 获取人员测试成绩" ] }, { "cell_type": "code", "execution_count": 12, "id": "ccb2fe86-c588-4373-85df-37adda55c694", "metadata": { "execution": { "iopub.execute_input": "2025-11-17T01:44:40.400061Z", "iopub.status.busy": "2025-11-17T01:44:40.399563Z", "iopub.status.idle": "2025-11-17T01:44:40.476607Z", "shell.execute_reply": "2025-11-17T01:44:40.476073Z", "shell.execute_reply.started": "2025-11-17T01:44:40.400012Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1225\n" ] } ], "source": [ "import json\n", "import datetime\n", "import csv\n", "from datetime import date\n", "import my_module1 as My\n", "\n", "filename = 'data/沧州炼化人员.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl) \n", "filename = 'data/marks_20251117-1.csv'\n", "re_ta = My.get_result(filename,dict1)\n", "\n", "\n", "filename = 'data/result_沧州炼化.json'\n", "with open(filename,'w') as fl:\n", " json.dump(re_ta, fl, ensure_ascii=False) \n", "print(len(re_ta))" ] }, { "cell_type": "markdown", "id": "0748c41c-bb8e-49e4-a88d-814928e9b956", "metadata": {}, "source": [ "## 导入手工数据" ] }, { "cell_type": "code", "execution_count": 13, "id": "9054c821-24a6-4ec3-82b4-1af2fbfd5090", "metadata": { "execution": { "iopub.execute_input": "2025-11-17T01:45:32.893349Z", "iopub.status.busy": "2025-11-17T01:45:32.892548Z", "iopub.status.idle": "2025-11-17T01:45:32.978502Z", "shell.execute_reply": "2025-11-17T01:45:32.977928Z", "shell.execute_reply.started": "2025-11-17T01:45:32.893261Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "122\n", "123\n", "1225\n" ] } ], "source": [ "import openpyxl\n", "import json\n", "from datetime import date\n", "\n", "wb = openpyxl.load_workbook('data/沧州俯卧撑手工成绩.xlsx')\n", "sheet = wb.active\n", "filename = 'data/result_沧州炼化.json'\n", "with open(filename,'r') as fl:\n", " dict2 = json.load(fl) \n", "\n", "for n in range(2, sheet.max_row+1):\n", " code = str(sheet.cell(n, 1).value)\n", " item = 'pushup'\n", " mark = str(sheet.cell(n, 2).value)\n", " rq = str(sheet.cell(n, 3).value)\n", " if code in dict2.keys():\n", " dict2[code]['rq'] = rq\n", " dict2[code].setdefault(item,{})\n", " dict2[code][item]['成绩'] = mark\n", " else:\n", " print(code)\n", " \n", "filename = 'data/result_沧州炼化-1.json'\n", "with open(filename,'w') as fl:\n", " json.dump(dict2, fl, ensure_ascii=False) \n", "print(len(re_ta)) " ] }, { "cell_type": "markdown", "id": "a446935a-db14-41d5-9420-d1a5ddd0e548", "metadata": {}, "source": [ "## 统计各部门测试情况" ] }, { "cell_type": "code", "execution_count": null, "id": "503c30bb-c537-43f6-b3c7-a1eeff4c313f", "metadata": {}, "outputs": [], "source": [ "import json\n", "\n", "filename = 'data/result_沧州炼化.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "filename = 'data/沧州炼化人员.json'\n", "with open(filename,'r') as fl:\n", " dict2 = json.load(fl)\n", "\n", "dict3 = {}\n", "for k, v in dict2.items():\n", " unit = v['unit']\n", " #sub_unit = v['sub_unit']\n", " dict3.setdefault(unit,{})\n", " dict3[unit].setdefault('人数',0)\n", " dict3[unit].setdefault('体测人数',0)\n", " #dict3[unit].setdefault(sub_unit,0)\n", " #dict3[unit][sub_unit] = dict3[unit][sub_unit] + 1\n", " dict3[unit]['人数'] = dict3[unit]['人数'] + 1\n", "\n", "title =['单位','体测人数']\n", "list1 = []\n", "for k,v in dict1.items(): \n", " unit = v['unit']\n", " #sub_unit = v['sub_unit']\n", " #dict3[unit][sub_unit] = dict3[unit][sub_unit] - 1\n", " dict3[unit].setdefault('体测人数',0)\n", " dict3[unit]['体测人数'] = dict3[unit]['体测人数'] + 1\n", "for k, v in dict3.items():\n", " list2 = [k,v['人数'],v['体测人数']]\n", " list1.append(list2)\n", "\n", "filename = 'data/沧州炼化部门测试情况(截至20251114).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": "e04d391d-57cb-4ece-a77b-b940950f6717", "metadata": {}, "source": [ "## 统计未体测人员明细表" ] }, { "cell_type": "code", "execution_count": 7, "id": "57de7845-76f2-4cdc-88a9-eb869acb28a5", "metadata": { "execution": { "iopub.execute_input": "2025-11-17T01:05:50.422689Z", "iopub.status.busy": "2025-11-17T01:05:50.421236Z", "iopub.status.idle": "2025-11-17T01:05:50.450916Z", "shell.execute_reply": "2025-11-17T01:05:50.450368Z", "shell.execute_reply.started": "2025-11-17T01:05:50.422616Z" } }, "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/沧州炼化人员.json'\n", "with open(filename,'r') as fl:\n", " dict2 = json.load(fl)\n", "\n", "list1 = []\n", "\n", "i = 1\n", "for k, v in dict2.items(): \n", " if k not in dict1.keys():\n", " list2 = [i,k,v['name'],v['unit']]\n", " i+=1\n", " list1.append(list2)\n", "#print(list1)\n", "filename = f'data/沧州炼化未测试人员名单(截至20251114).xlsx'\n", "title = ['序号','员工编号','姓名','部门']\n", "wb = openpyxl.Workbook()\n", "sheet = wb.active\n", "sheet.append(title)\n", "for row in list1:\n", " sheet.append(row) \n", "wb.save(filename)" ] }, { "cell_type": "markdown", "id": "9d39b9e8-7932-4f99-88da-0becf48d73e0", "metadata": {}, "source": [ "## 统计体测人员项目数" ] }, { "cell_type": "code", "execution_count": 14, "id": "c2ca861f-54ca-4312-bf24-20dbc2f3f2e6", "metadata": { "execution": { "iopub.execute_input": "2025-11-17T01:46:18.717093Z", "iopub.status.busy": "2025-11-17T01:46:18.716407Z", "iopub.status.idle": "2025-11-17T01:46:18.735809Z", "shell.execute_reply": "2025-11-17T01:46:18.735127Z", "shell.execute_reply.started": "2025-11-17T01:46:18.717026Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1553238 齐金永 公用工程部 13231725301 2\n", "1552999 赵崇胜 储运部 13722775060 2\n", "1553836 王成柱 炼油一部 13111760190 1\n", "1553839 徐振柱 炼油一部 17772650508 1\n" ] } ], "source": [ "import json\n", "\n", "filename = 'data/result_沧州炼化-1.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "xm = ['bmi','lung','grip','flexion','jump','pushup','balance','reaction','step','situp']\n", "for k,v in dict1.items():\n", " list1 = []\n", " for item in v.keys():\n", " if item in xm:\n", " list1.append(item)\n", " if len(list1) <3:\n", " print(k,v['name'],v['unit'],v['phone'],len(list1))" ] }, { "cell_type": "markdown", "id": "57a9f492-6971-4572-9e9e-8086a49dc6ce", "metadata": {}, "source": [ "## 导出测试人员信息" ] }, { "cell_type": "code", "execution_count": 15, "id": "e014e1f8-e13d-4bb1-a64a-606a3e44a876", "metadata": { "execution": { "iopub.execute_input": "2025-11-17T01:46:49.086947Z", "iopub.status.busy": "2025-11-17T01:46:49.086254Z", "iopub.status.idle": "2025-11-17T01:46:49.440499Z", "shell.execute_reply": "2025-11-17T01:46:49.439939Z", "shell.execute_reply.started": "2025-11-17T01:46:49.086882Z" } }, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "\n", "items = ['lung','grip','flexion','jump','pushup','situp','balance','reaction','step']\n", "title = ['编号','姓名','性别','单位','部门','身高','体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']\n", "\n", "filename = 'data/result_沧州炼化-1.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "filename = 'data/沧州炼化人员.json'\n", "with open(filename,'r') as fl:\n", " dict2 = json.load(fl)\n", " \n", "list1 = []\n", "for k, v in dict1.items():\n", " list2 = []\n", " list2.append(str(k).rjust(5,'0'))\n", " list2.append(v['name']) \n", " list2.append(dict2[k]['sex'])\n", " list2.append(dict2[k]['unit'])\n", " list2.append(dict2[k]['birth'])\n", " if 'phone' in v.keys():\n", " list2.append(dict2[k]['phone'])\n", " else:\n", " list2.append('')\n", " \n", " if 'bmi' in v.keys():\n", " height = v['bmi']['成绩'].split(',')[0]\n", " weight = v['bmi']['成绩'].split(',')[1]\n", " list2.append(height)\n", " list2.append(weight)\n", " else:\n", " list2.append('')\n", " list2.append('')\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", " \n", " list1.append(list2)\n", "filename = 'data/沧州炼化体测情况表(2025年)-1.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": "4042e92b-1d63-489a-9652-3f9f48453db8", "metadata": {}, "outputs": [], "source": [] } ], "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.12.3" } }, "nbformat": 4, "nbformat_minor": 5 }