Files
jupyter/体测单位/天津石化.ipynb
T
2023-10-18 21:16:16 +08:00

2366 lines
71 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"cells": [
{
"cell_type": "markdown",
"id": "e764be85-0ddf-4055-abd6-de2990e75db8",
"metadata": {
"jp-MarkdownHeadingCollapsed": true,
"tags": []
},
"source": [
"# 第一次体测"
]
},
{
"cell_type": "markdown",
"id": "ae533fe9-e20e-4e44-b9bb-030c4fa4e714",
"metadata": {
"tags": []
},
"source": [
"## 体测人员导入"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "1144aaac-92a0-4bcf-aba7-096f7dd3ad3b",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import openpyxl\n",
"import json\n",
"\n",
"\n",
"wb = openpyxl.load_workbook('data/天津石化员工检测花名册 (20221014).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, 6).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['sub_unit'] = sheet.cell(n, 2).value\n",
" if sheet.cell(n,5).value is not None:\n",
" dict1['id_num'] = sheet.cell(n,5).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": "93b9bfba-5404-4c9b-ac8f-48a3bf296669",
"metadata": {},
"source": [
"## 合并人员信息"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "d5171966-95ae-47ae-a75e-db08de772348",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"filename = 'data/天津石化人员名单.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl)\n",
"\n",
"filename = 'data/天津石化人员231113_1.json'\n",
"with open(filename,'r') as fl:\n",
" dict2 = json.load(fl)\n",
"\n",
"for k, v in dict2.items():\n",
" if k not in dict1.keys():\n",
" dict1.setdefault(k,{})\n",
" dict1[k]['name'] = dict2[k]['name']\n",
" dict1[k]['sex'] = dict2[k]['sex']\n",
" dict1[k]['unit'] = dict2[k]['name']\n",
" dict1[k]['sub_unit'] = dict2[k]['sub_unit']\n",
"filename = 'data/天津石化人员名单.json'\n",
"with open(filename, 'w') as fl:\n",
" json.dump(dict1, fl, ensure_ascii=False)\n",
"print('ok')"
]
},
{
"cell_type": "markdown",
"id": "5e648b69-40bf-4494-9079-e4e2b6ab8866",
"metadata": {},
"source": [
"## 获取人员测试成绩"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "a57ebb22-543c-4804-8d44-89984058ec1d",
"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,a.date_joined FROM places_result AS a,_tianjin AS b WHERE a.place_id=134 AND a.avatar_id=b.id\n",
"\n",
"re_ta = {}\n",
"dict1 = {}\n",
"list1 = []\n",
"#print(\"\\n运动项目信息:\")\n",
"filename = '体测单位/data/20230428_134.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_天津.json'\n",
"with open(filename,'w') as fl:\n",
" json.dump(re_ta, fl) \n",
"print('ok')"
]
},
{
"cell_type": "markdown",
"id": "55d961e5-a512-44b2-808e-7c55d7000d52",
"metadata": {},
"source": [
"## 导出测试成绩"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "38397ad4-2bb3-4b5e-8ece-9ea11e801890",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"import openpyxl\n",
"\n",
"items = ['身高','体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']\n",
"title = ['编号','姓名','性别','单位/部门','车间/科室','身高','体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']\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",
"for k, v in dict1.items():\n",
" list2 = []\n",
" list2.append(str(k).rjust(8,'0'))\n",
" list2.append(v['name']) \n",
" list2.append(dict2[k]['sex'])\n",
" list2.append(dict2[k]['unit'])\n",
" list2.append(dict2[k]['sub_unit'])\n",
" \n",
" for item in items:\n",
" if item in v.keys():\n",
" list2.append(v[item]['成绩'])\n",
" \n",
" elif item =='name':\n",
" list2.append(v[item])\n",
" else:\n",
" list2.append('') \n",
" \n",
" list1.append(list2)\n",
"filename = 'data/天津石化体测情况表(截至20221122).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": "239ceb76-f690-4dae-991c-62c38d617c85",
"metadata": {},
"source": [
"## 导出测试成绩(带得分)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "27529013-f3de-4e23-980d-f62203e4df88",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"import openpyxl\n",
"\n",
"items = ['身高','体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']\n",
"title = ['编号','姓名','性别','单位/部门','车间/科室','身高','','体重','','肺活量','','握力','','坐位体前屈','','纵跳','','俯卧撑','','一分钟仰卧起坐','','单脚站立','','选择反应时','','台阶指数']\n",
"filename = 'data/result_天津.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl)\n",
"\n",
"del dict1['1730253']\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(): #print(k,dict2[str(k)]['name'])\n",
" list2 = []\n",
" list2.append(str(k).rjust(5,'0'))\n",
" list2.append(dict2[k]['name']) \n",
" list2.append(dict2[k]['sex'])\n",
" list2.append(dict2[k]['unit']) \n",
" list2.append(dict2[k]['sub_unit']) \n",
" for item in items:\n",
" if item in dict1[k].keys():\n",
" list2.append(dict1[k][item]['成绩'])\n",
" list2.append(dict1[k][item]['得分']) \n",
" elif item =='name':\n",
" list2.append(dict1[k][item])\n",
" else:\n",
" list2.append('') \n",
" list2.append('') \n",
" list1.append(list2)\n",
"filename = 'data/天津石化体测情况表.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)\n",
"print('ok') "
]
},
{
"cell_type": "markdown",
"id": "1c7b219f-43cd-4bf0-971f-2c398f8db8ed",
"metadata": {},
"source": [
"## 按照日期进行报告分类"
]
},
{
"cell_type": "markdown",
"id": "3d57ff66-69c3-4c13-811b-f1e13b404077",
"metadata": {},
"source": [
"### 按照体测明细分类"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "29c0f15b-1345-4b46-ac1d-b45ddede9641",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"import time\n",
"import csv\n",
"import os,sys,shutil\n",
"import glob\n",
"\n",
"dict1 = {}\n",
"list1 = []\n",
"filename = 'data/134_2210.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",
"for result in list1:\n",
" user = str(result[4])\n",
" dict1.setdefault(user,'2022-10-01')\n",
" m_date = result[7]\n",
" if m_date> dict1[user]:\n",
" dict1[user] = m_date\n",
"\n",
"m_path = 'file/134'\n",
"\n",
"fls = glob.glob(f'file/new/*.pdf')\n",
"for fn in fls:\n",
" #old = os.path.basename(fn).split('.')[0].rjust(8,'0') \n",
" old = os.path.basename(fn).split('.')[0]\n",
" mrq = str(dict1[old]).split(' ')[0].replace('-', '', 2)\n",
" if not os.path.exists(m_path + '/new/' + mrq):\n",
" os.mkdir(m_path + '/new/' + mrq)\n",
" n_name = f'{m_path}/new/{mrq}/{str(old).rjust(8,\"0\")}_{mrq}.pdf'\n",
" if not os.path.exists(n_name):\n",
" shutil.copyfile(fn,n_name)\n",
"print('ok!')"
]
},
{
"cell_type": "markdown",
"id": "ae2b17bd-38b9-4809-affb-01441a5581eb",
"metadata": {},
"source": [
"### 按照报告生成日期分类"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "eb24c1be-b5d3-4e61-a432-854a887746d4",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"import time\n",
"import csv\n",
"import os,sys,shutil\n",
"import glob\n",
"\n",
"dict1 = {}\n",
"list1 = []\n",
"\n",
"m_path = 'file/134'\n",
"mrq = '20221028'\n",
"if not os.path.exists(m_path + '/' + mrq):\n",
" os.mkdir(m_path + '/' + mrq)\n",
"fls = glob.glob(f'file/new/*.pdf')\n",
"for fn in fls:\n",
" #old = os.path.basename(fn).split('.')[0].rjust(8,'0') \n",
" old = os.path.basename(fn).split('.')[0] \n",
" n_name = f'{m_path}/{mrq}/{str(old).rjust(8,\"0\")}_{mrq}.pdf'\n",
" if not os.path.exists(n_name):\n",
" shutil.copyfile(fn,n_name)\n",
"print('ok!')"
]
},
{
"cell_type": "markdown",
"id": "d9061d26-b09b-4bff-af24-a14adda3d83f",
"metadata": {},
"source": [
"## 按照部门报告分组"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "7ea2541f-461f-4eb5-860d-4b56d6be74ab",
"metadata": {},
"outputs": [],
"source": [
"import os,sys,shutil\n",
"import json\n",
"import math\n",
"import glob\n",
"from pathlib import Path\n",
"\n",
"fi_path = './file'\n",
"old = []\n",
"dict2 = {}\n",
"\n",
"\n",
"filename = 'data/天津石化人员名单.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl)\n",
"\n",
"for k, v in dict1.items():\n",
" m_name = v['name']\n",
" m_depart = v['unit'] \n",
" dict2[int(k)] = [m_name,m_depart]\n",
"\n",
"\n",
"\n",
"fls = glob.glob(f'./file/*.pdf')\n",
"\n",
"for fn in fls:\n",
" old.append(os.path.basename(fn).split('.')[0])\n",
" #print(fn)\n",
"\n",
"\n",
"for n in old: \n",
" o_name = f'{fi_path}/{n}.pdf'\n",
" if not os.path.exists(f'{fi_path}/new/{dict2[int(n)][1]}'):\n",
" os.mkdir(f'{fi_path}/new/{dict2[int(n)][1]}') \n",
" n_name = f'{fi_path}/new/{dict2[int(n)][1]}/{str(n).rjust(5,\"0\")}-{dict2[int(n)][0]}.pdf'\n",
" if not os.path.exists(n_name):\n",
" shutil.copyfile(o_name,n_name)\n",
" print(n_name)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "63eb8a23-4876-4be6-8800-1a67df8773ff",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import os,sys,shutil\n",
"import json\n",
"import math\n",
"import glob\n",
"from pathlib import Path\n",
"\n",
"fi_path = './file'\n",
"old = []\n",
"dict2 = {}\n",
"\n",
"\n",
"filename = 'data/天津石化人员名单.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl)\n",
"\n",
"for k, v in dict1.items():\n",
" m_name = v['name']\n",
" m_depart = v['unit'] \n",
" dict2[int(k)] = [m_name,m_depart]\n",
"\n",
"\n",
"\n",
"fls = glob.glob(f'./file/*.pdf')\n",
"\n",
"for fn in fls:\n",
" old.append(os.path.basename(fn).split('.')[0])\n",
"\n",
"for n in old: \n",
" o_name = f'{fi_path}/{n}.pdf'\n",
" new_path = Path('file/new',dict1[n]['unit'],dict1[n]['sub_unit'])\n",
" new_path.mkdir(parents = True, exist_ok = True)\n",
" n_name = Path(new_path,f'{str(n).rjust(7,\"0\")}-{dict2[int(n)][0]}.pdf')\n",
" if not os.path.exists(n_name):\n",
" shutil.copyfile(o_name,n_name)\n",
" print(n_name)\n",
" \n",
"print('ok')"
]
},
{
"cell_type": "markdown",
"id": "e4590323-6645-450a-8055-756a5bf35b34",
"metadata": {},
"source": [
"## 统计报告人员信息表"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "ed681a0d-4ee8-48ec-ab05-23da7156a44e",
"metadata": {},
"outputs": [],
"source": [
"import json\n",
"import openpyxl\n",
"import os\n",
"import glob\n",
"\n",
"filename = 'data/天津石化人员名单.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl)\n",
"m_path ='./file'\n",
"fls = glob.glob(f'file/*.pdf')\n",
"list1 = []\n",
"for fn in fls:\n",
" list2 = []\n",
" code = os.path.basename(fn).split('.')[0]\n",
" list2 = [code.rjust(7,\"0\"),dict1[code]['name'],dict1[code]['unit'],dict1[code]['sub_unit']]\n",
" list1.append(list2)\n",
"title = ['编号','姓名','单位/部门','车间/科室',] \n",
"filename = 'data/天津石化体测情况表.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": "838ec7d3-137c-4ccd-9f16-7b6312d1ffa6",
"metadata": {},
"source": [
"## PDF文件压缩"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "a6ab0943-b018-4dd6-9176-85a762f9f60c",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import fitz\n",
"from pdf2image import convert_from_path, convert_from_bytes\n",
"import os,sys\n",
"import tempfile\n",
"from pdf2image.exceptions import (\n",
" PDFInfoNotInstalledError,\n",
" PDFPageCountError,\n",
" PDFSyntaxError\n",
")\n",
"import img2pdf \n",
"import glob\n",
"import shutil\n",
"\n",
"def covert2pic(old_fn):\n",
" if os.path.exists('.pdf'): # 临时文件,需为空\n",
" shutil.rmtree('.pdf')\n",
" os.mkdir('.pdf')\n",
" with tempfile.TemporaryDirectory() as path:\n",
" images_from_path = convert_from_path(old_fn, dpi=100,fmt='jpg', output_folder='.pdf')\n",
"\n",
"def pic2pdf(new_fn):\n",
" fl1=glob.glob('.pdf/*.jpg')\n",
" fl1.sort()\n",
" a4inpt = (img2pdf.mm_to_pt(210),img2pdf.mm_to_pt(297))\n",
" layout_fun = img2pdf.get_layout_fun(a4inpt)\n",
" with open(new_fn,\"wb\") as f:\n",
" f.write(img2pdf.convert(fl1,layout_fun=layout_fun))\n",
" print(f'{new_fn}转换成功!')\n",
" \n",
"\n",
"\n",
"def pdfz(sor, obj, zoom): \n",
" covert2pic(zoom)\n",
" pic2pdf(obj)\n",
" \n",
"fi_path = 'file/134/20221122/'\n",
"fl = glob.glob(f'{fi_path}*.pdf')\n",
"\n",
"for fn in fl:\n",
" new_fn = fi_path+'new/'+os.path.basename(fn)\n",
" covert2pic(fn)\n",
" pic2pdf(new_fn)\n",
" shutil.rmtree('.pdf')\n",
"print('ok!')\n",
"\n"
]
},
{
"cell_type": "markdown",
"id": "a0cc9662-4171-4c2a-828d-f58c327ec8c1",
"metadata": {},
"source": [
"## 统计未测试人员名单"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "daef91be-1b58-4fb1-b182-64f43c07c90f",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"import openpyxl\n",
"\n",
"title = ['编号','姓名','性别','单位/部门','车间/科室']\n",
"filename = 'data/天津石化人员名单.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl)\n",
"filename = 'data/result_天津.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",
" if k not in dict2.keys(): \n",
" list2 = [k,dict1[k]['name'],dict1[k]['sex'],dict1[k]['unit'],dict1[k]['sub_unit'],] \n",
" list1.append(list2)\n",
"filename = 'data/天津石化未参加体测人数统计表.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)\n",
"print('ok!')"
]
},
{
"cell_type": "markdown",
"id": "72c693e1-dd7c-40fa-8948-4fd6fbea8ddc",
"metadata": {},
"source": [
"## 区分新文件"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "9d06d4f0-364b-438c-844b-7d5badaf3496",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import os,sys,shutil\n",
"import glob\n",
"import time\n",
"\n",
"fi_path = 'file/'\n",
"fls = glob.glob(f'{fi_path}*.pdf')\n",
"m_date = time.strptime('2022-10-28','%Y-%m-%d')\n",
"for fn in fls:\n",
" c_time = time.gmtime(os.path.getctime(fn))\n",
" if c_time > m_date:\n",
" n_name = f'{fi_path}new/{os.path.basename(fn)}'\n",
" if not os.path.exists(n_name):\n",
" shutil.copyfile(fn,n_name)\n",
" print(n_name)\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "32b61559-4495-4fbe-8eb6-2614e6225b5c",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"import openpyxl\n",
"\n",
"title = ['编号','姓名','性别','单位/部门','车间/科室']\n",
"filename = 'data/天津石化人员名单.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl)\n",
"filename = 'data/result_天津.json'\n",
"with open(filename,'r') as fl:\n",
" dict2 = json.load(fl)\n",
"print(len(dict2),len(dict1),)"
]
},
{
"cell_type": "markdown",
"id": "47015abe-4cb8-436b-afa5-9ffd78d4a628",
"metadata": {},
"source": [
"## 心理测试情况统计"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "c21efc40-2639-4b22-851f-925cd3f12d3a",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"import openpyxl\n",
"\n",
"title = ['编号','姓名','性别','单位/部门','车间/科室']\n",
"filename = 'data/天津石化人员名单.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl)\n",
"filename = 'data/134_xinli.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[4])\n",
"list3 = []\n",
"for k, v in dict1.items():\n",
" list2 = []\n",
" if k not in list1: \n",
" list2 = [k,dict1[k]['name'],dict1[k]['sex'],dict1[k]['unit'],dict1[k]['sub_unit'],] \n",
" list3.append(list2)\n",
"filename = 'data/天津石化未参加心理测试人数统计表.xlsx'\n",
"wb = openpyxl.Workbook()\n",
"sheet = wb.active\n",
"sheet.append(title)\n",
"for row in list3:\n",
" sheet.append(row)\n",
" \n",
"wb.save(filename)\n",
"print('ok!')"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "6b8ae75d-71a3-4cbe-a216-03c28d78156c",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"import openpyxl\n",
"\n",
"title = ['编号','姓名','性别','单位/部门','车间/科室']\n",
"filename = 'data/天津石化人员名单.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl)\n",
"list1 = []\n",
"filename = 'data/134_xinli.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",
" print(line[4])"
]
},
{
"cell_type": "markdown",
"id": "20e98f0d-61ea-43a5-8993-9656fed23099",
"metadata": {},
"source": [
"## 体检报告统计分析"
]
},
{
"cell_type": "markdown",
"id": "0436a3a2-6230-43b3-beae-bc89e789b285",
"metadata": {},
"source": [
"### excel数据导入"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "7bb2e3aa-591d-4fce-983a-cde5d4c30e56",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import openpyxl\n",
"import json\n",
"import re\n",
"\n",
"wb = openpyxl.load_workbook('data/体检结果(模板)化工.xlsx')\n",
"sheet = wb.active\n",
"# sheets = wb.sheetnames\n",
"dict1 = {}\n",
"\n",
"for n in range(11, sheet.max_row+1):\n",
" code = sheet.cell(n, 1).value\n",
" name = sheet.cell(n, 8).value\n",
" txt = sheet[f'DT{str(n)}'].value \n",
" txt = re.sub(r'\\n', \"\", txt)\n",
" txt = re.sub(r'\\t', \"\", txt)\n",
" txt = re.sub(r'二、尊敬的顾客您好,您本次体检的建议信息如下:', \"\", txt)\n",
" ss = r'三、温馨提示: 鉴于医学技术发展的局限性,个体间可能存在的生物差异性以及您选择的检查项目的局限性,任何一次医学检查的手段和方法都不具备绝对的特异性和灵敏度,对于疾病筛检仍有其盲点,因此,我们建议您对本次检查的异常结果进行随诊复查和其他相关检查,以获得更可靠的医学证据建立准确地医学判断。'\n",
" txt1 = re.sub(r'三、温馨提示.*', \"\", txt,re.S)\n",
" dict1.setdefault(code, {})\n",
" dict1[code]['name'] = name\n",
" dict1[code]['xb'] = sheet.cell(n, 9).value\n",
" #dict1[code]['birth'] = sheet.cell(n, 10).value\n",
" dict1[code]['report'] = txt1\n",
"filename = 'data/体检结果.json'\n",
"with open(filename,'w') as fl:\n",
" json.dump(dict1, fl, ensure_ascii=False) \n",
"print('ok')"
]
},
{
"cell_type": "markdown",
"id": "227a1c0b-fc78-4951-97ab-5664b59edd1d",
"metadata": {},
"source": [
"### 体检结果分解"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "b38aef28-5d1b-4762-9c7e-70a531594fa4",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import openpyxl\n",
"import json\n",
"import re\n",
"\n",
"mo1 = r'[0-9]、'\n",
"mo2 = '【.*】'\n",
"filename = 'data/体检结果.json'\n",
"list3 = []\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl)\n",
"for k, v in dict1.items():\n",
" \n",
" ss = v['report']\n",
" list1 = re.split(mo1,ss)\n",
" if len(list1) ==1:\n",
" continue\n",
" else:\n",
" list1.remove('')\n",
" #print(list1)\n",
" for item in list1:\n",
" list2 = re.search( mo2, item)\n",
" xm =list2.group()\n",
" \n",
" txt = item.replace(xm,'').strip()\n",
" list3.append([k,v['name'],v['xb'],xm,txt])\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)\n",
"print('ok!')"
]
},
{
"cell_type": "markdown",
"id": "964526bc-9c9c-4b63-9300-67b02d2608f5",
"metadata": {},
"source": [
"## 天津人员制卡"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "83f02525-fd26-41ba-8b6a-c3cd584825e6",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import binascii\n",
"import openpyxl\n",
"gbs = 'C2EDC1A2D1C7'\n",
"bs = binascii.a2b_hex(gbs)\n",
"#print('bs', bs)\n",
"#print('decode-bs:', bs.decode('gb2312'))\n",
"\n",
"s = '马立亚'\n",
"gbcode = s.encode('gb2312') # 先转成 bytes格式\n",
"#print('gbcode:', gbcode)\n",
"gbs = \"\".join([hex(ch)[2:] for ch in gbcode]) #\n",
"#print('gbs:', gbs)\n",
"\n",
"wb = openpyxl.load_workbook('data/联合六车间体质测定人员名单.xlsx')\n",
"sheet = wb.active\n",
"# sheets = wb.sheetnames\n",
"person = {}\n",
"list1 = []\n",
"for n in range(3, sheet.max_row+1):\n",
" name = sheet.cell(n, 3).value\n",
" code = sheet.cell(n, 2).value\n",
" gbcode = code.encode('gbk')\n",
" code = \"\".join([hex(ch)[2:] for ch in gbcode])\n",
" gbcode = name.encode('gbk')\n",
" name = \"\".join([hex(ch)[2:] for ch in gbcode])\n",
" #for s in code:\n",
" # print(ord(s))\n",
" \n",
" list1.append([sheet.cell(n, 1).value,sheet.cell(n, 2).value,sheet.cell(n, 3).value,code.ljust(32,'0'),name.ljust(32,'0')])\n",
" print(code.ljust(32,'0'),name.ljust(32,'0'))\n",
"\n",
"filename = 'data/联合六车间体质测定人员制卡名单.xlsx'\n",
"wb = openpyxl.Workbook()\n",
"sheet = wb.active\n",
"\n",
"for row in list1:\n",
" sheet.append(row)\n",
" \n",
"wb.save(filename)\n",
"print('ok!')\n"
]
},
{
"cell_type": "markdown",
"id": "638bbe8e-3770-40e1-b884-ceeeec5a053c",
"metadata": {},
"source": [
"## 因素分析"
]
},
{
"cell_type": "markdown",
"id": "9e25a7f2-0571-438b-9aa4-e3337d9fd840",
"metadata": {},
"source": [
"### 清除修改测试项目"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "6e6f6a63-b297-42e8-a9ba-b2636fda5d09",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"import openpyxl\n",
"\n",
"\n",
"filename = 'data/天津石化人员231113.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl)\n",
"code = '1734094'\n",
"items = ['身高','体重']\n",
"for item in items:\n",
" del dict1[code][item]\n",
"with open(filename, 'w') as fl:\n",
" json.dump(dict1, fl, ensure_ascii=False)\n",
"print('ok')"
]
},
{
"cell_type": "markdown",
"id": "f96b3aeb-bf37-4a8b-bf18-d0ae8f7df653",
"metadata": {},
"source": [
"### 人员情况导入"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "4d77ec9b-c561-4355-98af-b18c42c1f3ca",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import openpyxl\n",
"import json\n",
"\n",
"\n",
"wb = openpyxl.load_workbook('data/员工个人基础信息20230113.xlsx')\n",
"sheet = wb.active\n",
"# sheets = wb.sheetnames\n",
"person = {}\n",
"\n",
"for n in range(4, sheet.max_row+1):\n",
" code = int(sheet.cell(n, 1).value)\n",
" person.setdefault(code, {})\n",
" dict1 = {}\n",
" dict1['name'] = sheet.cell(n, 2).value\n",
" dict1['sex'] = sheet.cell(n, 3).value\n",
" dict1['unit'] = sheet.cell(n, 6).value\n",
" dict1['sub_unit'] = sheet.cell(n, 7).value\n",
" if sheet.cell(n,10).value is not None:\n",
" dict1['daoban'] = '是'\n",
" else:\n",
" dict1['daoban'] = '否'\n",
" dict1['age'] = sheet.cell(n, 13).value\n",
" dict1['gl'] = sheet.cell(n, 14).value\n",
" dict1['jhgl'] = sheet.cell(n, 15).value \n",
" person[code] = dict1\n",
"filename = 'data/天津石化人员231113.json'\n",
"with open(filename, 'w') as fl:\n",
" json.dump(person, fl, ensure_ascii=False)\n",
"print('ok')"
]
},
{
"cell_type": "markdown",
"id": "a5c58b77-69b6-4d76-8927-6e734556e848",
"metadata": {},
"source": [
"### 人员体测得分导入合并"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "db473c01-7e1a-48c4-a0d7-e44cdeb9e24b",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"import openpyxl\n",
"\n",
"items = ['身高','体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']\n",
"\n",
"filename = 'data/result_天津.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl)\n",
"\n",
"filename = 'data/天津石化人员231113.json'\n",
"with open(filename,'r') as fl:\n",
" dict2 = json.load(fl)\n",
"for k, v in dict2.items():\n",
" if k in dict1.keys():\n",
" for item in dict1[k].keys():\n",
" dict2[k][item] = dict1[k][item]\n",
"filename = 'data/天津石化人员231113.json'\n",
"with open(filename, 'w') as fl:\n",
" json.dump(dict2, fl, ensure_ascii=False)\n",
"print('ok')\n",
" "
]
},
{
"cell_type": "markdown",
"id": "cc53ec68-cfc4-449a-9905-095a079dc8ab",
"metadata": {},
"source": [
"### 筛选体测人员,计算得分"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "224cdee4-153f-424a-aaaa-92ef58943edb",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"\n",
"items = ['体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']\n",
"\n",
"filename = 'data/result_天津.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl)\n",
"\n",
"filename = 'data/天津石化人员231113.json'\n",
"with open(filename,'r') as fl:\n",
" dict2 = json.load(fl)\n",
"dict3 = {}\n",
"for k, v in dict2.items():\n",
" if k in dict1.keys():\n",
" dict3[k] = dict2[k]\n",
" i = 0\n",
" score =0\n",
" for item in dict2[k].keys(): \n",
" if item in items:\n",
" score = score + int(dict2[k][item]['得分'])\n",
" i+=1\n",
" dict3[k]['score'] = score\n",
" dict3[k]['item_num'] = i\n",
" dict3[k]['avg'] = round(score/i,2)\n",
"filename = 'data/天津石化线上测试结果.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl)\n",
"for k, v in dict2.items():\n",
" if k in dict1.keys():\n",
" dict3[k] = dict2[k]\n",
" dict3[k]['zhongyi'] = dict1[k]['中医体质']\n",
" \n",
"filename = 'data/天津石化人员231113_1.json'\n",
"with open(filename, 'w') as fl:\n",
" json.dump(dict3, fl, ensure_ascii=False)\n",
"print('ok')"
]
},
{
"cell_type": "markdown",
"id": "dd014e41-18f2-44e7-9f20-1190df4e7b45",
"metadata": {},
"source": [
"### 因素分析"
]
},
{
"cell_type": "markdown",
"id": "c63bca31-f003-49e9-a20d-1931c050c740",
"metadata": {},
"source": [
"#### 倒班因素分析"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "2a964412-8408-4039-a788-8cc1fc7cd518",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"import openpyxl\n",
"\n",
"filename = 'data/天津石化人员231113_1.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl)\n",
"unit = set()\n",
"\n",
"for k, v in dict1.items():\n",
" unit.add(dict1[k]['unit'])\n",
"#print(unit)\n",
"dict2 = {}\n",
"for k, v in dict1.items():\n",
" dict2.setdefault(v['unit'],{})\n",
" dict2[v['unit']].setdefault('是',{})\n",
" dict2[v['unit']].setdefault('否',{})\n",
" dict2[v['unit']]['是'].setdefault('num',0)\n",
" dict2[v['unit']]['否'].setdefault('num',0)\n",
" dict2[v['unit']]['是'].setdefault('score',0)\n",
" dict2[v['unit']]['否'].setdefault('score',0)\n",
" dict2[v['unit']]['是'].setdefault('zhongyi',0)\n",
" dict2[v['unit']]['否'].setdefault('zhongyi',0) \n",
" dict2[v['unit']]['是'].setdefault('pianpo',0)\n",
" dict2[v['unit']]['否'].setdefault('pianpo',0) \n",
" if 'avg' in v.keys():\n",
" dict2[v['unit']][v['daoban']]['num'] = dict2[v['unit']][v['daoban']]['num'] + 1\n",
" dict2[v['unit']][v['daoban']]['score'] = dict2[v['unit']][v['daoban']]['score'] + v['avg']\n",
" if 'zhongyi' in v.keys() :\n",
" dict2[v['unit']][v['daoban']]['zhongyi'] = dict2[v['unit']][v['daoban']]['zhongyi'] + 1\n",
" if 'zhongyi' in v.keys() and v['zhongyi']!='平和':\n",
" dict2[v['unit']][v['daoban']]['pianpo'] = dict2[v['unit']][v['daoban']]['pianpo'] + 1\n",
" \n",
" \n",
"for k, v in dict2.items(): \n",
" if v['是']['num'] > 0:\n",
" dict2[k]['是']['avg'] = round(v['是']['score']/v['是']['num'],2)\n",
" else:\n",
" dict2[k]['是']['avg'] = 0\n",
" if v['否']['num'] > 0:\n",
" dict2[k]['否']['avg'] = round(v['否']['score']/v['否']['num'],2)\n",
" else:\n",
" dict2[k]['否']['avg'] = 0\n",
"list1 = [] \n",
"for k, v in dict2.items():\n",
" list2 = []\n",
" unit = k\n",
" for k1, v1 in v.items():\n",
" daoban = k1\n",
" num = v1['num']\n",
" avg = v1['avg']\n",
" zhongyi = v1['zhongyi']\n",
" pianpo = v1['pianpo']\n",
" list2 = [k,daoban,num,avg,zhongyi,pianpo]\n",
" list1.append(list2)\n",
" \n",
"filename = 'data/天津倒班因素分析表.xlsx' \n",
"wb = openpyxl.Workbook()\n",
"sheet = wb.active\n",
"\n",
"for row in list1:\n",
" sheet.append(row)\n",
" \n",
"wb.save(filename)\n",
"print('ok!')"
]
},
{
"cell_type": "markdown",
"id": "2ccc4f6c-9cde-42d5-b41d-5b35ad86f042",
"metadata": {
"tags": []
},
"source": [
"#### 工龄因素分析"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "695b4933-b8c3-4be6-a024-742a982f0abb",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"import openpyxl\n",
"\n",
"filename = 'data/天津石化人员231113_1.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl)\n",
"unit = set()\n",
"\n",
"for k, v in dict1.items():\n",
" unit.add(dict1[k]['unit'])\n",
"#print(unit)\n",
"dict2 = {}\n",
"for k, v in dict1.items():\n",
" gld = int(int(v['gl'])/10)\n",
" dict2.setdefault(gld,{})\n",
" dict2[gld].setdefault(v['sex'],{})\n",
" dict2[gld][v['sex']].setdefault('num',0)\n",
" dict2[gld][v['sex']].setdefault('score',0)\n",
" dict2[gld][v['sex']].setdefault('zhongyi',0)\n",
" dict2[gld][v['sex']].setdefault('pianpo',0) \n",
" if 'avg' in v.keys():\n",
" dict2[gld][v['sex']]['num'] = dict2[gld][v['sex']]['num'] + 1\n",
" dict2[gld][v['sex']]['score'] = dict2[gld][v['sex']]['score'] + v['avg']\n",
" if 'zhongyi' in v.keys() :\n",
" dict2[gld][v['sex']]['zhongyi'] = dict2[gld][v['sex']]['zhongyi'] + 1\n",
" if 'zhongyi' in v.keys() and v['zhongyi']!='平和':\n",
" dict2[gld][v['sex']]['pianpo'] = dict2[gld][v['sex']]['pianpo'] + 1\n",
"nl = {}\n",
"nl[0] = '工龄0-9年'\n",
"nl[1] = '工龄10-19年'\n",
"nl[2] = '工龄20-29年'\n",
"nl[3] = '工龄30-39年'\n",
"nl[4] = '工龄40-49年'\n",
"nl[5] = '工龄50年以上'\n",
"list1 = [] \n",
"for k, v in nl.items():\n",
" list2 = []\n",
" gld = v\n",
" for k1, v1 in dict2[k].items():\n",
" num = v1['num']\n",
" score = v1['score']\n",
" zhongyi = v1['zhongyi']\n",
" pianpo = v1['pianpo']\n",
" list2 = [k,daoban,num,avg,zhongyi,pianpo]\n",
" list1.append(list2)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "181ff60b-3372-441a-8cd7-29e8de66ceb8",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"import openpyxl\n",
"\n",
"filename = 'data/天津石化人员231113_1.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl)\n",
"unit = set()\n",
"\n",
"for k, v in dict1.items():\n",
" unit.add(dict1[k]['unit'])\n",
"#print(unit)\n",
"dict2 = {}\n",
"for k, v in dict1.items():\n",
" gld = int(int(v['gl'])/10)\n",
" dict2.setdefault(gld,{}) \n",
" dict2[gld].setdefault('num',0)\n",
" dict2[gld].setdefault('score',0)\n",
" dict2[gld].setdefault('zhongyi',0)\n",
" dict2[gld].setdefault('pianpo',0) \n",
" if 'avg' in v.keys():\n",
" dict2[gld]['num'] = dict2[gld]['num'] + 1\n",
" dict2[gld]['score'] = dict2[gld]['score'] + v['avg']\n",
" if 'zhongyi' in v.keys() :\n",
" dict2[gld]['zhongyi'] = dict2[gld]['zhongyi'] + 1\n",
" if 'zhongyi' in v.keys() and v['zhongyi']!='平和':\n",
" dict2[gld]['pianpo'] = dict2[gld]['pianpo'] + 1\n",
"print(dict2)\n",
"nl = {}\n",
"nl[0] = '工龄0-9年'\n",
"nl[1] = '工龄10-19年'\n",
"nl[2] = '工龄20-29年'\n",
"nl[3] = '工龄30-39年'\n",
"nl[4] = '工龄40-49年'\n",
"nl[5] = '工龄50年以上'\n",
"list1 = [] \n",
"for k, v in nl.items():\n",
" list2 = []\n",
" gld = v\n",
" \n",
" num = dict2[k]['num']\n",
" score = dict2[k]['score']\n",
" if num > 0:\n",
" avg = round(score/num,2)\n",
" else:\n",
" avg = 0\n",
" zhongyi = dict2[k]['zhongyi']\n",
" pianpo = dict2[k]['pianpo']\n",
" list2 = [gld,num,avg,zhongyi,pianpo]\n",
" list1.append(list2)\n",
"filename = 'data/天津倒班因素分析表(工龄).xlsx' \n",
"wb = openpyxl.Workbook()\n",
"sheet = wb.active\n",
"\n",
"for row in list1:\n",
" sheet.append(row)\n",
" \n",
"wb.save(filename)\n",
"print('ok!')"
]
},
{
"cell_type": "markdown",
"id": "f8fa3027-c88a-43a1-88c8-c6e9b7e94f91",
"metadata": {},
"source": [
"#### 年龄因素分析"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "d5ab1a99-cb3e-4905-8c05-a6122ea09913",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"import openpyxl\n",
"\n",
"filename = 'data/天津石化人员231113_1.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl)\n",
"unit = set()\n",
"\n",
"for k, v in dict1.items():\n",
" unit.add(dict1[k]['unit'])\n",
"#print(unit)\n",
"dict2 = {}\n",
"for k, v in dict1.items():\n",
" gld = int(int(v['age'])/10)\n",
" dict2.setdefault(gld,{}) \n",
" dict2[gld].setdefault('num',0)\n",
" dict2[gld].setdefault('score',0)\n",
" dict2[gld].setdefault('zhongyi',0)\n",
" dict2[gld].setdefault('pianpo',0) \n",
" if 'avg' in v.keys():\n",
" dict2[gld]['num'] = dict2[gld]['num'] + 1\n",
" dict2[gld]['score'] = dict2[gld]['score'] + v['avg']\n",
" if 'zhongyi' in v.keys() :\n",
" dict2[gld]['zhongyi'] = dict2[gld]['zhongyi'] + 1\n",
" if 'zhongyi' in v.keys() and v['zhongyi']!='平和':\n",
" dict2[gld]['pianpo'] = dict2[gld]['pianpo'] + 1\n",
"nl = {}\n",
"\n",
"nl[2] = '20-29岁'\n",
"nl[3] = '30-39岁'\n",
"nl[4] = '40-49岁'\n",
"nl[5] = '50-59岁'\n",
"nl[6] = '60岁及以上'\n",
"list1 = [] \n",
"for k, v in nl.items():\n",
" list2 = []\n",
" gld = v\n",
" \n",
" num = dict2[k]['num']\n",
" score = dict2[k]['score']\n",
" if num > 0:\n",
" avg = round(score/num,2)\n",
" else:\n",
" avg = 0\n",
" zhongyi = dict2[k]['zhongyi']\n",
" pianpo = dict2[k]['pianpo']\n",
" list2 = [gld,num,avg,zhongyi,pianpo]\n",
" list1.append(list2)\n",
"filename = 'data/天津倒班因素分析表(年龄).xlsx' \n",
"wb = openpyxl.Workbook()\n",
"sheet = wb.active\n",
"\n",
"for row in list1:\n",
" sheet.append(row)\n",
" \n",
"wb.save(filename)\n",
"print('ok!')"
]
},
{
"cell_type": "markdown",
"id": "42e4ef5b-9aa8-4098-8f33-df9787dd34ab",
"metadata": {},
"source": [
"#### 倒班时间因素分析"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "255b5649-fb85-424d-9fad-0f3e1dff2be3",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"import openpyxl\n",
"\n",
"filename = 'data/天津石化人员231113_1.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl)\n",
"unit = set()\n",
"\n",
"for k, v in dict1.items():\n",
" unit.add(dict1[k]['unit'])\n",
"#print(unit)\n",
"dict2 = {}\n",
"for k, v in dict1.items():\n",
" if v['daoban'] == '是':\n",
" \n",
" gld = int(int(v['gl'])/10)\n",
" dict2.setdefault(gld,{}) \n",
" dict2[gld].setdefault('num',0)\n",
" dict2[gld].setdefault('score',0)\n",
" dict2[gld].setdefault('zhongyi',0)\n",
" dict2[gld].setdefault('pianpo',0) \n",
" if 'avg' in v.keys():\n",
" dict2[gld]['num'] = dict2[gld]['num'] + 1\n",
" dict2[gld]['score'] = dict2[gld]['score'] + v['avg']\n",
" if 'zhongyi' in v.keys() :\n",
" dict2[gld]['zhongyi'] = dict2[gld]['zhongyi'] + 1\n",
" if 'zhongyi' in v.keys() and v['zhongyi']!='平和':\n",
" dict2[gld]['pianpo'] = dict2[gld]['pianpo'] + 1\n",
"print(dict2)\n",
"nl = {}\n",
"nl[0] = '倒班工龄0-9年'\n",
"nl[1] = '倒班工龄10-19年'\n",
"nl[2] = '倒班工龄20-29年'\n",
"nl[3] = '倒班工龄30-39年'\n",
"nl[4] = '倒班工龄40-49年'\n",
"list1 = [] \n",
"for k, v in nl.items():\n",
" list2 = []\n",
" gld = v\n",
" \n",
" num = dict2[k]['num']\n",
" score = dict2[k]['score']\n",
" if num > 0:\n",
" avg = round(score/num,2)\n",
" else:\n",
" avg = 0\n",
" zhongyi = dict2[k]['zhongyi']\n",
" pianpo = dict2[k]['pianpo']\n",
" list2 = [gld,num,avg,zhongyi,pianpo]\n",
" list1.append(list2)\n",
"filename = 'data/天津倒班因素分析表(倒班工龄).xlsx' \n",
"wb = openpyxl.Workbook()\n",
"sheet = wb.active\n",
"\n",
"for row in list1:\n",
" sheet.append(row)\n",
" \n",
"wb.save(filename)\n",
"print('ok!')"
]
},
{
"cell_type": "markdown",
"id": "73524e7f-4262-46d3-a733-74ac18e43855",
"metadata": {
"tags": []
},
"source": [
"# 第二次体测"
]
},
{
"cell_type": "markdown",
"id": "1be2bf2c-b1c8-494b-bc6b-681b9e75d18d",
"metadata": {},
"source": [
"## 体测人员导入"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "25283932-c03a-4a34-a59d-314fc64d8fbd",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import openpyxl\n",
"import json\n",
"\n",
"\n",
"wb = openpyxl.load_workbook('data/天津石化员工检测花名册(20230915).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, 1).value)\n",
" person.setdefault(code, {})\n",
" dict1 = {}\n",
" dict1['name'] = sheet.cell(n, 2).value\n",
" dict1['sex'] = sheet.cell(n, 3).value\n",
" dict1['unit'] = sheet.cell(n, 5).value\n",
" dict1['sub_unit'] = sheet.cell(n, 6).value\n",
" dict1['birth'] = sheet.cell(n,4).value\n",
" person[code] = dict1\n",
"filename = 'data/天津石化人员名单2023.json'\n",
"with open(filename, 'w') as fl:\n",
" json.dump(person, fl, ensure_ascii=False)\n",
"print('ok')"
]
},
{
"cell_type": "markdown",
"id": "b758be8c-c9e2-46d4-b646-88403bb41e29",
"metadata": {},
"source": [
"## 生产读卡系统文件"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "c908e5e7-c014-4b8d-a583-a8c2f7115a96",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"\n",
"filename = 'data/天津石化人员名单2023.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/data1.json\", \"w\",encoding = 'utf-8') as file:\n",
" file.write(json_data) \n",
"print('ok')"
]
},
{
"cell_type": "markdown",
"id": "60f4831c-b44e-40d2-ad8a-d79079c071f9",
"metadata": {},
"source": [
"## 获取人员测试成绩"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "e26b88fc-c75b-4c1e-82ea-5017370afa9b",
"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",
"re_ta = {}\n",
"dict1 = {}\n",
"list1 = []\n",
"filename = 'data/天津石化人员名单2023.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl) \n",
"\n",
"filename = 'data/places_result_20231017.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[2])\n",
" if user in dict1.keys(): \n",
" m_item = str(result[3]) \n",
" re_ta.setdefault(user,{}) \n",
" re_ta[user]['name'] = dict1[user]['name']\n",
" re_ta[user]['sex'] = dict1[user]['sex'] \n",
" re_ta[user]['unit'] = dict1[user]['unit']\n",
" re_ta[user]['sub_unit'] = dict1[user]['sub_unit']\n",
" item_name = item[m_item]['name']\n",
" re_ta[user].setdefault(item_name,{}) \n",
" score = int(result[4])/item[m_item]['divisor'] \n",
" re_ta[user][item_name]['成绩'] = f'{score} {item[m_item][\"unit\"]}'\n",
"print(len(re_ta))\n",
"filename = 'data/result_天津2023.json'\n",
"\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": "43bd1127-fa76-4c1e-8890-4bb47b28ecdf",
"metadata": {},
"source": [
"## 导出测试人员信息"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "0a6ea33d-c112-4ed8-9366-3376e55a5731",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"import openpyxl\n",
"\n",
"items = ['身高','体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']\n",
"title = ['编号','姓名','性别','单位','部门','身高','体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']\n",
"\n",
"filename = 'data/result_天津2023.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl)\n",
"\n",
"filename = 'data/天津石化人员名单2023.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]['sub_unit'])\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/天津石化体测情况(截至20231017).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": "4a53db48-365e-4056-8468-bbc829e83682",
"metadata": {},
"source": [
"## 统计各部门测试情况"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "589a5d44-605d-41a1-a981-7ec7258305ed",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"\n",
"filename = 'data/result_天津2023.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl)\n",
"\n",
"filename = 'data/天津石化人员名单2023.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(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]['人数'] = dict3[unit]['人数'] - 1\n",
"for k, v in dict3.items():\n",
" list2 = [k,v['人数']]\n",
" list1.append(list2)\n",
"\n",
"filename = 'data/天津部门未测试情况(截至20231013).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": "d8e4038d-8ba0-48e7-b101-d30539cc2c2a",
"metadata": {},
"source": [
"## 统计单一部门未体测人员明细表"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "2f7c9847-f283-4a09-b385-2c7559be7c7e",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"import openpyxl\n",
"\n",
"filename = 'data/result_天津2023.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl)\n",
"\n",
"filename = 'data/天津石化人员名单2023.json'\n",
"with open(filename,'r') as fl:\n",
" dict2 = json.load(fl)\n",
"unit_name = '炼油部'\n",
"rq = '20231008'\n",
"list1 = []\n",
"\n",
"i = 1\n",
"for k, v in dict2.items():\n",
" unit = v['unit']\n",
" if unit == unit_name and k not in dict1.keys():\n",
" list2 = [i,k,v['name'],unit,v['sub_unit']]\n",
" i+=1\n",
" list1.append(list2)\n",
"filename = f'data/天津石化{unit_name}未测试人员名单(截至{rq}).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": "a0754a83-0b8e-4bd8-9deb-b7d70a850f43",
"metadata": {},
"source": [
"## 统计所有部门未体测人员明细表"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "e47c361d-a047-4932-b24e-fdcf65cb8a73",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"import openpyxl\n",
"\n",
"filename = 'data/result_天津2023.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl)\n",
"unit = set()\n",
"for k, v in dict1.items():\n",
" unit.add(v['unit'])\n",
"rq = '20231013'\n",
"filename = 'data/天津石化人员名单2023.json'\n",
"with open(filename,'r') as fl:\n",
" dict2 = json.load(fl)\n",
"for unit_name in unit:\n",
" list1 = []\n",
"\n",
" i = 1\n",
" for k, v in dict2.items():\n",
" unit = v['unit']\n",
" if unit == unit_name and k not in dict1.keys():\n",
" list2 = [i,k,v['name'],unit,v['sub_unit']]\n",
" i+=1\n",
" list1.append(list2)\n",
" filename = f'data/天津石化{unit_name}未测试人员名单(截至{rq}).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)\n",
" wb.close\n",
" print(f'{unit_name}未测试人员名单(截至{rq})生产成功!')\n",
"\n",
" "
]
},
{
"cell_type": "markdown",
"id": "6246f8b0-d9fc-4c9a-8ffa-07bd8dcdc3ed",
"metadata": {},
"source": [
"## 统计未体测人员明细表"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "b7f62515-c45d-4d10-8e94-b5f9a9a98e3f",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"import openpyxl\n",
"\n",
"filename = 'data/result_天津2023.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl)\n",
"\n",
"filename = 'data/天津石化人员名单2023.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",
" \n",
" if k not in dict1.keys():\n",
" list2 = [i,k,v['name'],unit,v['sub_unit']]\n",
" i+=1\n",
" list1.append(list2)\n",
"filename = f'data/天津石化未测试人员名单.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": "ed2a999f-47b9-4f36-88e2-354a0e37243b",
"metadata": {},
"source": [
"## 转换报告格式"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "678ce52b-5368-4ec8-8b9e-0567895d856a",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"import datetime\n",
"import csv\n",
"from datetime import date\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",
"item['1']['en'] = 'lung'\n",
"item['2']['en'] = 'grip'\n",
"item['3']['en'] = 'flexion'\n",
"item['4']['en'] = 'jump'\n",
"item['5']['en'] = 'pushup'\n",
"item['6']['en'] = 'balance'\n",
"item['7']['en'] = 'reaction'\n",
"item['8']['en'] = 'step'\n",
"item['9']['en'] = 'situp'\n",
"item['10']['en'] = 'height'\n",
"item['11']['en'] = 'weight'\n",
"\n",
"\n",
"re_ta = {}\n",
"dict1 = {}\n",
"list1 = []\n",
"filename = 'data/天津石化人员名单2023.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl) \n",
"\n",
"filename = 'data/places_result_20231017.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",
"#f_item = ['lung','grip','flexion','jump','balance','reaction','step','situp']\n",
"#m_item = ['lung','grip','flexion','jump','pushup','balance','reaction','step']\n",
"for result in list1:\n",
" user = str(result[2])\n",
" rq = date.fromisoformat(result[6].replace('/','-'))\n",
" if user in dict1.keys():\n",
" l_xm = []\n",
" m_item = str(result[3]) \n",
" re_ta.setdefault(user,{}) \n",
" re_ta[user]['name'] = dict1[user]['name']\n",
" re_ta[user]['sex'] = dict1[user]['sex']\n",
" if dict1[user]['sex'] == '男':\n",
" l_xm = ['weight','height','lung','grip','flexion','jump','pushup','balance','reaction','step']\n",
" else:\n",
" l_xm = ['weight','height','lung','grip','flexion','jump','balance','reaction','step','situp']\n",
" re_ta[user]['unit'] = dict1[user]['unit']\n",
" birth = date.fromisoformat(dict1[user]['birth'].replace('/','-'))\n",
" #nian = int(birth[0].strip())\n",
" #yue = int(birth[1].strip())\n",
" #ri = int(birth[2].strip())\n",
" #print(k,nian,yue,ri)\n",
" item_name = item[m_item]['en'] \n",
" if item_name in l_xm: \n",
" days = (rq-birth).days \n",
" re_ta[user]['age'] = int(days/365)\n",
" re_ta[user]['month'] = int(days/365*12)\n",
" re_ta[user]['rq'] = result[6]\n",
"\n",
"\n",
" re_ta[user].setdefault(item_name,{}) \n",
" score = int(result[4])/item[m_item]['divisor'] \n",
" re_ta[user][item_name]['成绩'] = f'{score} {item[m_item][\"unit\"]}'\n",
"print(len(re_ta))\n",
"filename = 'data/result_天津231017.json'\n",
"\n",
"with open(filename,'w') as fl:\n",
" json.dump(re_ta, fl, ensure_ascii=False) \n",
"print(len(re_ta))"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "17a9248a-18b3-4696-a895-dde38f7f88a5",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"import time\n",
"\n",
"filename = '../item.json'\n",
"item = {}\n",
"unit = {}\n",
"with open(filename,'r') as fl:\n",
" dict3 = json.load(fl) \n",
"for k,v in dict3.items():\n",
" item[k] = v\n",
"item['1']['en'] = 'lung'\n",
"item['2']['en'] = 'grip'\n",
"item['3']['en'] = 'flexion'\n",
"item['4']['en'] = 'jump'\n",
"item['5']['en'] = 'pushup'\n",
"item['6']['en'] = 'balance'\n",
"item['7']['en'] = 'reaction'\n",
"item['8']['en'] = 'step'\n",
"item['9']['en'] = 'situp'\n",
"item['10']['en'] = 'height'\n",
"item['11']['en'] = 'weight'\n",
"\n",
"filename = 'data/体质检测标准 (1).json' \n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl)\n",
"\n",
"\n",
"\n",
"def cal_score(data1):\n",
" #data = {'name':'张三','sex':'M','age':37,'item':'StepExperiment','result':46} \n",
" person = dict1['person']\n",
" criteria = dict1['criteria']\n",
" if data1['age'] >59:\n",
" data1['age'] = 59\n",
" if data1['age'] <20:\n",
" data1['age'] = 20\n",
" info = data1['sex']+str(data1['age'])\n",
" bz = person[info]\n",
" mx = criteria[bz][data1['item']]\n",
" result = data1['result'] \n",
" if data1['item'] == 'reaction':\n",
" for bz1 in mx:\n",
" if result > bz1:\n",
" #print(bz1)\n",
" score = mx.index(bz1,0)\n",
" break\n",
" else:\n",
" score = 5\n",
" else:\n",
" for bz1 in mx:\n",
" if result < bz1:\n",
" #print(bz1)\n",
" score = mx.index(bz1,0)\n",
" break\n",
" else:\n",
" score = 5\n",
" return(score)\n",
"filename = 'data/体质检测标准_BMI.json'\n",
"with open(filename,'r') as fl:\n",
" dict4 = json.load(fl) \n",
" \n",
"def cal_bmi(data1):\n",
" # data = {'name':'张三','sex':'M','age':37,'item':'HeightWeight','result':'177.7,97.0'}\n",
" person = dict4['person']\n",
" criteria = dict4['criteria']\n",
" if data1['age'] > 59:\n",
" data1['age'] = 59\n",
" if data1['age'] <20:\n",
" data1['age'] = 20\n",
" info = data1['sex']+str(data1['age'])\n",
" bz = person[info]\n",
" #print(bz)\n",
" result = data1['result']\n",
" #print(data1['code'],result)\n",
" height = int(float(result.split(',')[0]))\n",
" weight = float(result.split(',')[1])\n",
" if str(height) not in criteria[bz]:\n",
" score = 1\n",
" else: \n",
" mx = criteria[bz][str(height)]\n",
" if weight < mx[0]:\n",
" score = 1\n",
" elif weight < mx[1]:\n",
" score = 3\n",
" elif weight < mx[2]:\n",
" score = 5 \n",
" elif weight <= mx[3]:\n",
" score = 3 \n",
" elif weight > mx[3]:\n",
" score = 1\n",
" return score\n",
" \n",
" \n",
"\n",
"#list_item = ['lung','grip','flexion','jump','pushup','balance','reaction','step','situp','height','weight']\n",
"list_item = ['lung','grip','flexion','jump','pushup','balance','reaction','step','situp']\n",
"filename = 'data/result_天津231017.json'\n",
"with open(filename,'r') as fl:\n",
" dict2 = json.load(fl) \n",
"for k, v in dict2.items():\n",
" #print(k)\n",
" if v['sex'] == '男':\n",
" sex = 'M'\n",
" else:\n",
" sex = 'F' \n",
" if 'height' in v.keys() and 'weight' in v.keys():\n",
" bmi_data = v['height']['成绩'].split()[0]+','+ v['weight']['成绩'].split()[0]\n",
" data1 = {'code':k,'sex':sex,'age':v['age'],'item':'HeightWeight','result':bmi_data}\n",
" dict2[k]['bmi'] = {}\n",
" dict2[k]['bmi']['成绩'] = bmi_data\n",
" dict2[k]['bmi']['score'] = cal_bmi(data1)\n",
" for item_en in list_item:\n",
" if item_en in v.keys(): \n",
" data1 = {'code':k,'sex':sex,'age':v['age'],'item':item_en,'result':float(v[item_en]['成绩'].split()[0])}\n",
" dict2[k][item_en]['score'] = cal_score(data1)\n",
" #print(k,v[item_en]['成绩'],cal_score(data1))\n",
"\n",
"filename = f'data/result_天津231017.json'\n",
"with open(filename,'w') as fl:\n",
" json.dump(dict2,fl , ensure_ascii=False) \n",
"print('ok!') "
]
},
{
"cell_type": "markdown",
"id": "c1c98895-27e7-41c8-a43b-a63ebfa1c5e2",
"metadata": {},
"source": [
"## 生成报告"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "f6171872-6b48-480a-b2c7-cf368d6cc6d8",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import requests\n",
"import json\n",
"import openpyxl\n",
"\n",
"\n",
"headers = {\n",
" \"Content-Type\": \"application/json; charset=UTF-8\"\n",
" }\n",
"filename = 'data/result_天津231017.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl)\n",
"list1 = []\n",
"fiie_path ='./134/'\n",
"list_item = ['lung','grip','flexion','jump','pushup','balance','reaction','step','situp','bmi']\n",
"i=1\n",
"list2 = []\n",
"for k, v in dict1.items():\n",
" list1 = []\n",
" mydata = {}\n",
" \n",
" id = str(k).rjust(8,\"0\")\n",
" mydata['path'] = fiie_path+id+'-'+ v['name']+'.pdf'\n",
" mydata['title'] = '中石化(天津)石油化工有限公司'\n",
" mydata['subtitle'] = v['unit']\n",
" mydata['id'] = id\n",
" mydata['name'] = v['name']\n",
" if v['sex'] == '男':\n",
" mydata['gender'] = 'male'\n",
" else:\n",
" mydata['gender'] = 'female'\n",
" \n",
" mydata['month'] = v['month']\n",
" mydata['fits'] = {}\n",
" for item in list_item:\n",
" if item in v.keys():\n",
" if item in ['lung','pushup','step','situp']:\n",
" mark = v[item]['成绩'].split()[0].split('.')[0]\n",
" else:\n",
" mark = v[item]['成绩'].split()[0]\n",
" mydata['fits'][item] = {'mark':mark,'score':v[item]['score']}\n",
" if len(mydata['fits']) >2:\n",
" \n",
" list1.append(mydata)\n",
" list2.append([k,v['name']])\n",
" i+=1\n",
" #x = requests.post('http://192.168.31.163:3003', data = json.dumps(list1), headers=headers)\n",
" print(id,v['name'],x.text)\n",
" #x.close()\n",
"print(i)"
]
},
{
"cell_type": "markdown",
"id": "489fdbe1-30ed-4630-b2fa-d926e41bdcc9",
"metadata": {},
"source": [
"## 核对报告人数"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "906fa6c6-3446-4176-a443-fe16e52a8a3a",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import os,sys,shutil\n",
"import json\n",
"import glob\n",
"from pathlib import Path\n",
"\n",
"fi_path = '/home/songyi/pdf-typescript-old2/134'\n",
"\n",
"fls = glob.glob(f'{fi_path}/*.pdf')\n",
"\n",
"filename = 'data/result_天津231017.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl)\n",
"list1 = []\n",
"for fn in fls:\n",
" fi_name =Path(fn).stem.split('-')[0]\n",
" code = int(fi_name)\n",
" list1.append(str(code))\n",
"for k, v in dict1.items():\n",
" if k not in list1:\n",
" print(k,v['name'])"
]
},
{
"cell_type": "markdown",
"id": "cb587095-1a0c-4ab1-b9e5-e9e5b0d52cee",
"metadata": {},
"source": [
"## 报告按部门分类"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "3fa6a1a9-63af-4f4e-9d30-b94f4357f7dc",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import os,sys,shutil\n",
"import json\n",
"import glob\n",
"from pathlib import Path\n",
"\n",
"fi_path = '/home/songyi/pdf-typescript-old2/134'\n",
"new_path = 'file/134'\n",
"old = []\n",
"dict2 = {}\n",
"\n",
"filename = 'data/天津石化人员名单2023.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl)\n",
"fls = glob.glob(f'{fi_path}/*.pdf')\n",
"for fn in fls:\n",
" fi_name =Path(fn).stem.split('-')[0]\n",
" code = int(fi_name)\n",
" unit_path = Path(new_path,dict1[str(code)]['unit'])\n",
" unit_path.mkdir(parents = True, exist_ok = True)\n",
" n_name = Path(unit_path,Path(fn).stem+'.pdf')\n",
" if not os.path.exists(n_name):\n",
" shutil.copyfile(fn,n_name)\n",
" #print(n_name)"
]
},
{
"cell_type": "markdown",
"id": "fdcd8ea1-21ab-48ab-b7cc-0dad65b06bf2",
"metadata": {},
"source": [
"## 生成体测报告打印明细表"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "623671be-cef0-4a2c-bf1a-889ab159760f",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import os,sys,shutil\n",
"import json\n",
"import glob\n",
"from pathlib import Path\n",
"import openpyxl\n",
"\n",
"fi_path = '/home/songyi/pdf-typescript-old2/134'\n",
"\n",
"filename = 'data/天津石化人员名单2023.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl)\n",
"fls = glob.glob(f'{fi_path}/*.pdf')\n",
"list1 = []\n",
"for fn in fls:\n",
" list2 = []\n",
" fi_name =Path(fn).stem.split('-')[0] \n",
" code = int(fi_name)\n",
" unit = dict1[str(code)]['unit']\n",
" list2 = [fi_name,Path(fn).stem.split('-')[1],unit]\n",
" \n",
" list1.append(list2)\n",
"print(list1)\n",
"filename = 'data/天津石化体测报告打印明细表.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) \n",
"print('ok')"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "8157084e-67a1-48d9-a3c2-34ea8b170039",
"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.10.12"
}
},
"nbformat": 4,
"nbformat_minor": 5
}