{ "cells": [ { "cell_type": "markdown", "id": "4925cb3a-bea3-4a4d-9590-6b91b62ca5b4", "metadata": { "tags": [] }, "source": [ "# 体质检测管理" ] }, { "cell_type": "markdown", "id": "2a85feec-695b-4ea8-8093-91a59ed34c7f", "metadata": { "jp-MarkdownHeadingCollapsed": true, "tags": [], "toc-hr-collapsed": true }, "source": [ "## 体测单位信息导入" ] }, { "cell_type": "markdown", "id": "0b8d5cc0-e549-4547-98cc-a753f3a729d1", "metadata": { "jp-MarkdownHeadingCollapsed": true, "tags": [] }, "source": [ "### 安庆炼化信息导入" ] }, { "cell_type": "code", "execution_count": null, "id": "c5a0568c-3833-4335-a4b9-600310e1a541", "metadata": { "tags": [] }, "outputs": [], "source": [ "import openpyxl\n", "import json\n", "import pymongo\n", "\n", "myclient = pymongo.MongoClient('mongodb://localhost:27017/')\n", "mydb = myclient[\"tice\"]\n", "mycol = mydb[\"unit\"]\n", "\n", "name = '中国石油化工股份有限公司安庆炼化分公司'\n", "short_name = '安庆炼化'\n", "myquery = {\"name\": name}\n", "if mycol.find_one(myquery) is None:\n", " wb = openpyxl.load_workbook('data/中国石油化工股份有限公司安庆炼化分公司员工在职人员名单.xlsx')\n", " sheet = wb.active\n", " # sheets = wb.sheetnames\n", " depart = []\n", " dict1 = {}\n", " new_code = []\n", " for n in range(2, sheet.max_row+1):\n", " m_depart = sheet.cell(n,5).value\n", " if m_depart not in depart:\n", " depart.append(sheet.cell(n,5).value)\n", " # print(sheet.cell(n,5).value)\n", "\n", " dict1['name'] = '中国石油化工股份有限公司安庆炼化分公司'\n", " dict1['short_name'] = '安庆炼化'\n", " dict1['depart'] = depart\n", " mycol.insert_one(dict1)\n", " print('ok!')\n", "else:\n", " print('该单位已存在!')" ] }, { "cell_type": "markdown", "id": "944372ff-9dc1-47e0-bfc0-a7d783fa9f43", "metadata": { "jp-MarkdownHeadingCollapsed": true, "tags": [] }, "source": [ "### 石家庄炼化信息导入" ] }, { "cell_type": "code", "execution_count": null, "id": "da3ded8a-d958-4aa7-be79-6c28a009b7cf", "metadata": {}, "outputs": [], "source": [ "import openpyxl\n", "import json\n", "import pymongo\n", "\n", "myclient = pymongo.MongoClient('mongodb://localhost:27017/')\n", "mydb = myclient[\"tice\"]\n", "mycol = mydb[\"unit\"]\n", "\n", "name = '中国石油化工股份有限公司石家庄炼化分公司'\n", "short_name = '石家庄炼化'\n", "myquery = {\"name\": name}\n", "if mycol.find_one(myquery) is None:\n", " wb = openpyxl.load_workbook('data/中石化石家庄人员名单.xlsx')\n", " sheet = wb.active\n", " # sheets = wb.sheetnames\n", " depart = []\n", " dict1 = {}\n", " new_code = []\n", " for n in range(2, sheet.max_row+1):\n", " m_depart = sheet.cell(n,5).value\n", " if m_depart not in depart:\n", " depart.append(sheet.cell(n,5).value)\n", " # print(sheet.cell(n,5).value)\n", "\n", " dict1['name'] = '中国石油化工股份有限公司石家庄炼化分公司'\n", " dict1['short_name'] = '石家庄炼化'\n", " dict1['depart'] = depart\n", " mycol.insert_one(dict1)\n", " print('ok!')\n", "else:\n", " print('该单位已存在!')" ] }, { "cell_type": "markdown", "id": "a6147f12-5dd6-46a1-9b66-0d02d2d59197", "metadata": { "jp-MarkdownHeadingCollapsed": true, "tags": [] }, "source": [ "### 北海炼化信息导入" ] }, { "cell_type": "code", "execution_count": null, "id": "e03f8ef7-a1c6-415c-914a-c426476aa71a", "metadata": {}, "outputs": [], "source": [ "import openpyxl\n", "import json\n", "import pymongo\n", "\n", "myclient = pymongo.MongoClient('mongodb://localhost:27017/')\n", "mydb = myclient[\"tice\"]\n", "mycol = mydb[\"unit\"]\n", "\n", "name = '中国石油化工股份有限公司北海炼化分公司'\n", "short_name = '北海炼化'\n", "myquery = {\"name\": name}\n", "if mycol.find_one(myquery) is None:\n", " wb = openpyxl.load_workbook('北海炼化名单表(202110).xlsx')\n", " sheet = wb.active\n", " # sheets = wb.sheetnames\n", " depart = []\n", " dict1 = {}\n", " new_code = []\n", " for n in range(2, sheet.max_row+1):\n", " m_depart = sheet.cell(n,5).value\n", " if m_depart not in depart:\n", " depart.append(sheet.cell(n,5).value)\n", " # print(sheet.cell(n,5).value)\n", "\n", " dict1['name'] = '中国石油化工股份有限公司北海炼化分公司'\n", " dict1['short_name'] = '北海炼化'\n", " dict1['depart'] = depart\n", " mycol.insert_one(dict1)\n", " print('ok!')\n", "else:\n", " print('该单位已存在!')" ] }, { "cell_type": "markdown", "id": "15024574-745e-400c-8aac-6f1b6f635362", "metadata": { "jp-MarkdownHeadingCollapsed": true, "tags": [] }, "source": [ "### 济南炼化信息导入" ] }, { "cell_type": "code", "execution_count": null, "id": "a3cbaf21-a9cb-4066-a5cc-4375d25fcc86", "metadata": {}, "outputs": [], "source": [ "import openpyxl\n", "import json\n", "import pymongo\n", "\n", "myclient = pymongo.MongoClient('mongodb://localhost:27017/')\n", "mydb = myclient[\"tice\"]\n", "mycol = mydb[\"unit\"]\n", "\n", "name = '中国石油化工股份有限公司济南炼化分公司'\n", "short_name = '北海炼化'\n", "myquery = {\"name\": name}\n", "if mycol.find_one(myquery) is None:\n", " wb = openpyxl.load_workbook('data/济南炼化.xlsx')\n", " sheet = wb.active\n", " # sheets = wb.sheetnames\n", " depart = []\n", " dict1 = {}\n", " new_code = []\n", " for n in range(2, sheet.max_row+1):\n", " m_depart = sheet.cell(n,5).value\n", " if m_depart not in depart:\n", " depart.append(sheet.cell(n,5).value)\n", " # print(sheet.cell(n,5).value)\n", "\n", " dict1['name'] = '中国石油化工股份有限公司济南炼化分公司'\n", " dict1['short_name'] = '济南炼化'\n", " dict1['depart'] = depart\n", " mycol.insert_one(dict1)\n", " print('ok!')\n", "else:\n", " print('该单位已存在!')" ] }, { "cell_type": "markdown", "id": "80c42a26-cdc2-4078-93e7-6b8557f41ba2", "metadata": { "jp-MarkdownHeadingCollapsed": true, "tags": [] }, "source": [ "### 中石化石油工程设计信息导入" ] }, { "cell_type": "code", "execution_count": null, "id": "82a80c63-42b6-4f92-beba-274e2da2bb38", "metadata": {}, "outputs": [], "source": [ "import openpyxl\n", "import json\n", "import pymongo\n", "\n", "myclient = pymongo.MongoClient('mongodb://localhost:27017/')\n", "mydb = myclient[\"tice\"]\n", "mycol = mydb[\"unit\"]\n", "\n", "name = '中石化石油工程设计'\n", "short_name = '中石化石油工程设计'\n", "myquery = {\"name\": name}\n", "if mycol.find_one(myquery) is None:\n", " wb = openpyxl.load_workbook('data/东营.xlsx')\n", " sheet = wb.active\n", " # sheets = wb.sheetnames\n", " depart = []\n", " dict1 = {}\n", " new_code = []\n", " for n in range(2, sheet.max_row+1):\n", " m_depart = sheet.cell(n,5).value\n", " if m_depart not in depart:\n", " depart.append(sheet.cell(n,5).value)\n", " # print(sheet.cell(n,5).value)\n", "\n", " dict1['name'] = '中国石油化工股份有限公司济南炼化分公司'\n", " dict1['short_name'] = '济南炼化'\n", " dict1['depart'] = depart\n", " mycol.insert_one(dict1)\n", " print('ok!')\n", "else:\n", " print('该单位已存在!')" ] }, { "cell_type": "markdown", "id": "c0ec85f6-e897-4f94-af46-1007d58ad1e3", "metadata": { "jp-MarkdownHeadingCollapsed": true, "tags": [] }, "source": [ "### 沧州炼化信息导入" ] }, { "cell_type": "code", "execution_count": null, "id": "a083426f-9946-47ec-8b2a-ea0a7f287def", "metadata": {}, "outputs": [], "source": [ "import openpyxl\n", "import json\n", "import pymongo\n", "\n", "myclient = pymongo.MongoClient('mongodb://localhost:27017/')\n", "mydb = myclient[\"tice\"]\n", "mycol = mydb[\"unit\"]\n", "\n", "name = '中国石油化工股份有限公司沧州炼化分公司'\n", "short_name = '沧州炼化'\n", "myquery = {\"name\": name}\n", "if mycol.find_one(myquery) is None:\n", " wb = openpyxl.load_workbook('data/沧州.xlsx')\n", " sheet = wb.active\n", " # sheets = wb.sheetnames\n", " depart = []\n", " dict1 = {}\n", " new_code = []\n", " for n in range(2, sheet.max_row+1):\n", " m_depart = sheet.cell(n,5).value\n", " if m_depart not in depart:\n", " depart.append(sheet.cell(n,5).value)\n", " # print(sheet.cell(n,5).value)\n", "\n", " dict1['name'] = '中国石油化工股份有限公司沧州炼化分公司'\n", " dict1['short_name'] = '沧州炼化'\n", " dict1['depart'] = depart\n", " mycol.insert_one(dict1)\n", " print('ok!')\n", "else:\n", " print('该单位已存在!')" ] }, { "cell_type": "markdown", "id": "9e6fbf9c-3162-4597-9a62-d8ddc0295ffe", "metadata": {}, "source": [ "### 长岭石化信息导入" ] }, { "cell_type": "code", "execution_count": null, "id": "a89e8c88-2b22-4efd-a82e-e7f7bd0d28bd", "metadata": { "tags": [] }, "outputs": [], "source": [ "import openpyxl\n", "import json\n", "import pymongo\n", "\n", "myclient = pymongo.MongoClient('mongodb://localhost:27017/')\n", "mydb = myclient[\"tice\"]\n", "mycol = mydb[\"unit\"]\n", "\n", "name = '中国石油化工股份有限公司长岭分公司'\n", "short_name = '长岭炼化'\n", "myquery = {\"name\": name}\n", "if mycol.find_one(myquery) is None:\n", " wb = openpyxl.load_workbook('data/长岭.xlsx')\n", " sheet = wb.active\n", " # sheets = wb.sheetnames\n", " depart = []\n", " dict1 = {}\n", " new_code = []\n", " for n in range(2, sheet.max_row+1):\n", " m_depart = sheet.cell(n,5).value\n", " if m_depart not in depart:\n", " depart.append(sheet.cell(n,5).value)\n", " # print(sheet.cell(n,5).value)\n", "\n", " dict1['name'] = '中国石油化工股份有限公司长岭分公司'\n", " dict1['short_name'] = '长岭炼化'\n", " dict1['depart'] = depart\n", " mycol.insert_one(dict1)\n", " print('ok!')\n", "else:\n", " print('该单位已存在!')" ] }, { "cell_type": "markdown", "id": "d7665556-0455-4688-9cf0-43737e40c6f3", "metadata": {}, "source": [ "### 岳阳兴长石化信息导入" ] }, { "cell_type": "code", "execution_count": null, "id": "bae91469-c894-468a-9bdd-b1aae367ea39", "metadata": {}, "outputs": [], "source": [ "import openpyxl\n", "import json\n", "import pymongo\n", "\n", "myclient = pymongo.MongoClient('mongodb://localhost:27017/')\n", "mydb = myclient[\"tice\"]\n", "mycol = mydb[\"unit\"]\n", "\n", "name = '岳阳兴长石化股份有限公司'\n", "short_name = '兴长石化'\n", "myquery = {\"name\": name}\n", "if mycol.find_one(myquery) is None:\n", " wb = openpyxl.load_workbook('data/岳阳兴长.xlsx')\n", " sheet = wb.active\n", " # sheets = wb.sheetnames\n", " depart = []\n", " dict1 = {}\n", " new_code = []\n", " for n in range(2, sheet.max_row+1):\n", " m_depart = sheet.cell(n,5).value\n", " if m_depart not in depart:\n", " depart.append(sheet.cell(n,5).value)\n", " # print(sheet.cell(n,5).value)\n", "\n", " dict1['name'] = '岳阳兴长石化股份有限公司'\n", " dict1['short_name'] = '兴长石化'\n", " dict1['depart'] = depart\n", " mycol.insert_one(dict1)\n", " print('ok!')\n", "else:\n", " print('该单位已存在!')" ] }, { "cell_type": "markdown", "id": "bf42e8af-a506-4e60-a661-b4281e3fef54", "metadata": { "toc-hr-collapsed": true }, "source": [ "## 录入体测信息" ] }, { "cell_type": "code", "execution_count": null, "id": "91a8f4f4-c417-4db7-94ba-2d3404e5c2c9", "metadata": { "tags": [] }, "outputs": [], "source": [ "import pymongo\n", "from bson.objectid import ObjectId\n", "from dateutil import parser\n", "\n", "myclient = pymongo.MongoClient('mongodb://localhost:27017/')\n", "mydb = myclient[\"tice\"]\n", "mycol = mydb[\"unit\"]\n", "mycol1 = mydb[\"event\"]\n", "dict1 = {}\n", "dict2 = {}\n", "code = '122'\n", "name = '中国石油化工股份有限公司济南炼化分公司'\n", "myquery = {\"name\": name}\n", "\n", "dict2['unit'] = '中国石油化工股份有限公司济南炼化分公司'\n", "dict2['address'] = '山东济南'\n", "dict2['date_begin'] = '2021-11-30'\n", "dict2['date_end'] = '2021-12-10'\n", "dict1[code] = dict2\n", "if mycol.find_one(myquery) is None:\n", " print('体测单位不存在!')\n", "else:\n", " myquery1 = {\"name\": name,\"event.code\": code}\n", " if mycol.find_one(myquery1) is None:\n", " mycol.update_one(myquery,{'$set':{f'exam.{code}':dict2}},True)\n", " print('ok!')\n", " else:\n", " print('该体测信息已经存在!')" ] }, { "cell_type": "markdown", "id": "0c144068-4f2d-4901-bd28-725ecb260fd4", "metadata": {}, "source": [ "## 导出单位员工信息" ] }, { "cell_type": "code", "execution_count": null, "id": "d80c482d-aee2-45cf-8ac8-c357171f17f7", "metadata": { "tags": [] }, "outputs": [], "source": [ "import openpyxl\n", "import json\n", "import pymongo\n", "from bson.objectid import ObjectId\n", "\n", "myclient = pymongo.MongoClient('mongodb://localhost:27017/')\n", "mydb = myclient[\"tice\"]\n", "mycol = mydb[\"person\"]\n", "\n", "wb = openpyxl.load_workbook('data/济南炼化.xlsx')\n", "sheet = wb.active\n", "# sheets = wb.sheetnames\n", "list1 = []\n", "person = {}\n", "new_code = []\n", "for n in range(2, sheet.max_row+1):\n", " code = str(sheet.cell(n, 1).value).rjust(5,\"0\")\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", " if sheet.cell(n, 4).value is None:\n", " dict1['birth'] = sheet.cell(n, 6).value\n", " else:\n", " dict1['id_num'] = sheet.cell(n, 4).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": "54d4790d-973f-4ee6-abff-3d5ff962de23", "metadata": { "jp-MarkdownHeadingCollapsed": true, "tags": [], "toc-hr-collapsed": true }, "source": [ "## 获取测试人员名单导入数据库" ] }, { "cell_type": "markdown", "id": "611d2cc4-26c3-4c42-82ad-21f843f2c699", "metadata": { "tags": [] }, "source": [ "### 安庆炼化" ] }, { "cell_type": "code", "execution_count": null, "id": "8ca8289e-b6b0-4b73-a788-1dd20592981f", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import pymongo\n", "from bson.objectid import ObjectId\n", "import pymysql\n", "\n", "myclient = pymongo.MongoClient('mongodb://localhost:27017/')\n", "mydb = myclient[\"tice\"]\n", "mycol = mydb[\"person\"]\n", "\n", "db = pymysql.connect(\"localhost\",\"root\",\"songyi\",\"ydyb\" )\n", "cursor = db.cursor()\n", "\n", "place_id = 120\n", "exam_person = []\n", "sql = f'SELECT distinct a.avatar_id FROM places_result AS a WHERE a.place_id={place_id} and a.avatar_id < 4999 ORDER BY a.avatar_id '\n", "cursor.execute(sql)\n", "results = cursor.fetchall()\n", "cursor.close\n", "for result in results:\n", " exam_person.append(str(result[0]).rjust(5,'0'))\n", "\n", "filename = '安庆炼化人员名单.json'\n", "\n", "list1 = []\n", "list2 = []\n", "with open(filename,'r') as fl:\n", " all_person = json.load(fl)\n", "with open('result.json','r') as fl1:\n", " res = json.load(fl1)\n", "for k, v in all_person.items():\n", " if k in exam_person:\n", " dict2 = {}\n", " dict3 = {}\n", " dict2['name'] = v['name']\n", " if v['sex'] == '男':\n", " dict2['sex'] = 'M'\n", " else:\n", " dict2['sex'] = 'F'\n", " if 'birth' in v:\n", " s = str(v['birth'])\n", " dict2['birth'] = f'{s[:4]}-{s[4:6]}-{s[6:8]}'\n", " if 'id_num' in v:\n", " s = v['id_num']\n", " dict2['id_num'] = s\n", " dict2['birth'] = f'{s[6:10]}-{s[10:12]}-{s[12:14]}'\n", " dict2.setdefault('exam',{})\n", " \n", " #dict3['code'] = 120\n", " dict3['sn'] = k\n", " dict3['result'] = res[k]\n", " dict2['exam'][str(place_id)] = dict3\n", " list1.append(dict2)\n", "x = mycol.insert_many(list1)\n", "mycol1 = mydb[\"event\"]\n", "myquery = {'code':120}\n", "mycol1.update_one(myquery, {'$push': {'persons':x.inserted_ids}})\n", "print('ok!')" ] }, { "cell_type": "markdown", "id": "edc06db7-9ae5-441a-8273-88ad598096ba", "metadata": { "tags": [] }, "source": [ "### 石家庄炼化" ] }, { "cell_type": "code", "execution_count": null, "id": "2fc0a54e-6a54-46e4-a9c2-f27243b8918c", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import pymongo\n", "from bson.objectid import ObjectId\n", "import os,sys,shutil\n", "\n", "myclient = pymongo.MongoClient('mongodb://localhost:27017/')\n", "mydb = myclient[\"tice\"]\n", "mycol = mydb[\"person\"]\n", "\n", "fi_path = os.getcwd() + '/file/210803'\n", "filename = '石家庄炼化人员名单.json'\n", "code = '119'\n", "fl=os.listdir(fi_path)\n", "old = []\n", "for fn in fl:\n", " if os.path.isfile(fi_path + '/' + fn):\n", " ofn = fn.split('.')[0].rjust(5,\"0\")\n", " old.append(ofn) \n", "old.sort()\n", "\n", "list1 = []\n", "list2 = []\n", "with open(filename,'r') as fl:\n", " all_person = json.load(fl)\n", "with open('result1.json','r') as fl1:\n", " res = json.load(fl1)\n", "for k, v in all_person.items():\n", " if k in old:\n", " dict2 = {}\n", " dict3 = {}\n", " dict2['name'] = v['name']\n", " if v['sex'] == '男':\n", " dict2['sex'] = 'M'\n", " else:\n", " dict2['sex'] = 'F'\n", " if 'birth' in v:\n", " s = str(v['birth'])\n", " dict2['birth'] = f'{s[:4]}-{s[4:6]}-{s[6:8]}'\n", " if 'id_num' in v:\n", " s = v['id_num']\n", " dict2['id_num'] = s\n", " dict2['birth'] = f'{s[6:10]}-{s[10:12]}-{s[12:14]}'\n", " dict2.setdefault('exam',{})\n", " \n", " #dict3['code'] = 120\n", " dict3['sn'] = k\n", " dict3['result'] = res[k]\n", " dict2['exam'][code] = dict3\n", " list1.append(dict2)\n", "x = mycol.insert_many(list1)\n", "\n", "print('ok!')" ] }, { "cell_type": "markdown", "id": "46dfdcbb-face-4269-a1c7-d43f36cbf906", "metadata": { "tags": [] }, "source": [ "### 北海炼化" ] }, { "cell_type": "code", "execution_count": null, "id": "d4bc0dc6-8835-425a-9f3f-97d2163e7d73", "metadata": {}, "outputs": [], "source": [ "import json\n", "import pymongo\n", "from bson.objectid import ObjectId\n", "import os,sys,shutil\n", "import pymysql\n", "\n", "myclient = pymongo.MongoClient('mongodb://localhost:27017/')\n", "mydb = myclient[\"tice\"]\n", "mycol = mydb[\"person\"]\n", "\n", "\n", "\n", "fi_path = os.getcwd() + '/file/210803'\n", "filename = '石家庄炼化人员名单.json'\n", "code = '121'\n", "fl=os.listdir(fi_path)\n", "old = []\n", "for fn in fl:\n", " if os.path.isfile(fi_path + '/' + fn):\n", " ofn = fn.split('.')[0].rjust(5,\"0\")\n", " old.append(ofn) \n", "old.sort()\n", "\n", "list1 = []\n", "list2 = []\n", "with open(filename,'r') as fl:\n", " all_person = json.load(fl)\n", "with open('result1.json','r') as fl1:\n", " res = json.load(fl1)\n", "for k, v in all_person.items():\n", " if k in old:\n", " dict2 = {}\n", " dict3 = {}\n", " dict2['name'] = v['name']\n", " if v['sex'] == '男':\n", " dict2['sex'] = 'M'\n", " else:\n", " dict2['sex'] = 'F'\n", " if 'birth' in v:\n", " s = str(v['birth'])\n", " dict2['birth'] = f'{s[:4]}-{s[4:6]}-{s[6:8]}'\n", " if 'id_num' in v:\n", " s = v['id_num']\n", " dict2['id_num'] = s\n", " dict2['birth'] = f'{s[6:10]}-{s[10:12]}-{s[12:14]}'\n", " dict2.setdefault('exam',{})\n", " \n", " #dict3['code'] = 120\n", " dict3['sn'] = k\n", " dict3['result'] = res[k]\n", " dict2['exam'][code] = dict3\n", " list1.append(dict2)\n", "x = mycol.insert_many(list1)\n", "\n", "print('ok!')" ] }, { "cell_type": "markdown", "id": "3dbdfb94-e823-43e2-a7ea-16f094c6f03b", "metadata": {}, "source": [ "### 济南炼化" ] }, { "cell_type": "code", "execution_count": null, "id": "2d01b42b-41cf-4b53-bbbc-f4ccb2bc5a0a", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import pymongo\n", "from bson.objectid import ObjectId\n", "import os,sys,shutil\n", "import pymysql\n", "\n", "myclient = pymongo.MongoClient('mongodb://localhost:27017/')\n", "mydb = myclient[\"tice\"]\n", "mycol = mydb[\"person\"]\n", "\n", "\n", "\n", "fi_path = os.getcwd() + '/file/211130'\n", "filename = 'data/济南炼化人员名单.json'\n", "code = '122'\n", "fl=os.listdir(fi_path)\n", "old = []\n", "for fn in fl:\n", " if os.path.isfile(fi_path + '/' + fn):\n", " ofn = fn.split('.')[0].rjust(5,\"0\")\n", " old.append(ofn) \n", "old.sort()\n", "\n", "list1 = []\n", "list2 = []\n", "with open(filename,'r') as fl:\n", " all_person = json.load(fl)\n", "with open('data/result_jn.json','r') as fl1:\n", " res = json.load(fl1)\n", "for k, v in all_person.items():\n", " if k in old:\n", " dict2 = {}\n", " dict3 = {}\n", " dict2['name'] = v['name']\n", " if v['sex'] == '男':\n", " dict2['sex'] = 'M'\n", " else:\n", " dict2['sex'] = 'F'\n", " if 'birth' in v:\n", " s = str(v['birth'])\n", " dict2['birth'] = f'{s[:4]}-{s[4:6]}-{s[6:8]}'\n", " if 'id_num' in v:\n", " s = v['id_num']\n", " dict2['id_num'] = s\n", " dict2['birth'] = f'{s[6:10]}-{s[10:12]}-{s[12:14]}'\n", " dict2.setdefault('exam',{})\n", " \n", " #dict3['code'] = 120\n", " dict3['sn'] = k\n", " dict3['result'] = res[str(k)]\n", " dict2['exam'][code] = dict3\n", " list1.append(dict2)\n", "x = mycol.insert_many(list1)\n", "\n", "print('ok!')" ] }, { "cell_type": "markdown", "id": "95ad1920-1393-4830-a48a-540070b51a09", "metadata": { "jp-MarkdownHeadingCollapsed": true, "tags": [] }, "source": [ "## 测试项目添加测试人员名单" ] }, { "cell_type": "code", "execution_count": null, "id": "adf13de2-8205-4511-a655-75989440967e", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "from bson.objectid import ObjectId\n", "import pymongo\n", "import pymysql\n", "\n", "db = pymysql.connect(\"localhost\",\"root\",\"songyi\",\"ydyb\" )\n", "cursor = db.cursor()\n", "\n", "list1 = []\n", "sql = f'SELECT distinct a.avatar_id FROM places_result AS a WHERE a.place_id={place_id} and a.avatar_id < 4999 ORDER BY a.avatar_id '\n", "cursor.execute(sql)\n", "results = cursor.fetchall()\n", "cursor.close\n", "for result in results:\n", " list1.append(str(result[0]).rjust(5,'0'))\n", "\n", "myclient = pymongo.MongoClient('mongodb://localhost:27017/')\n", "mydb = myclient[\"tice\"]\n", "mycol = mydb[\"event\"]\n", "myquery = {'code':120}\n", "mycol.update_one(myquery,{'$push':{'persons':list1}})\n", " \n", "print('ok')\n", " \n", " " ] }, { "cell_type": "markdown", "id": "2bb3cbdd-9fe1-4345-8c5a-53acb1a386de", "metadata": { "tags": [] }, "source": [ "## 获取人员测试成绩" ] }, { "cell_type": "markdown", "id": "8814b784-f561-455b-9125-b20672df2379", "metadata": { "tags": [] }, "source": [ "### 读取数据库获取人员测试成绩" ] }, { "cell_type": "code", "execution_count": null, "id": "910c3fcd-121a-42c0-9465-ad79a5829239", "metadata": { "tags": [] }, "outputs": [], "source": [ "import pymysql\n", "import json\n", "import time\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", "user_id = 5\n", "place_id =128\n", "#user = '包永'\n", "db = pymysql.connect(\"localhost\",\"root\",\"songyi\",\"ydyb\" )\n", "cursor = db.cursor()\n", "\n", "sql = f'SELECT a.item_id,a.performance,a.score,DATE_FORMAT(a.date,\"%Y-%m-%d\") as date1,a.avatar_id FROM places_result AS a WHERE a.place_id={place_id} AND a.avatar_id < 4999 ORDER BY a.avatar_id,date1'\n", "cursor.execute(sql)\n", "re_ta = {}\n", "dict1 = {}\n", "print(\"\\n运动项目信息:\")\n", "results = cursor.fetchall()\n", "for result in results: \n", " user = str(result[4]).rjust(5,'0')\n", " m_item = str(result[0])\n", " \n", " re_ta.setdefault(user,{})\n", " re_ta[user]['date'] =result[3]\n", " item_name = item[m_item]['name']\n", " re_ta[user].setdefault(item_name,{})\n", " \n", " #dict1.setdefault(item[m_item]['name'],{})\n", " score = result[1]/item[m_item]['divisor']\n", " #dict1[item[m_item]['name']]['成绩'] =f'{score} {item[m_item][\"unit\"]}'\n", " #dict1[item[m_item]['name']]['得分'] =result[2]\n", " re_ta[user][item_name]['成绩'] = f'{score} {item[m_item][\"unit\"]}'\n", " re_ta[user][item_name]['得分'] =result[2]\n", " \n", " #re_ta[user] = dict1\n", " #print(re_ta)\n", "filename = 'data/result_cl.json'\n", "with open(filename,'w') as fl:\n", " json.dump(re_ta, fl,ensure_ascii=False) \n", "print('ok')\n" ] }, { "cell_type": "markdown", "id": "9d517d8f-44ed-4672-8e31-e1673ffc9d1b", "metadata": {}, "source": [ "### 读取csv文件获取人员测试成绩" ] }, { "cell_type": "code", "execution_count": 20, "id": "93d73139-1734-49e5-a59a-15898af9b1d8", "metadata": { "execution": { "iopub.execute_input": "2022-09-20T15:35:38.432469Z", "iopub.status.busy": "2022-09-20T15:35:38.431154Z", "iopub.status.idle": "2022-09-20T15:35:39.124591Z", "shell.execute_reply": "2022-09-20T15:35:39.120784Z", "shell.execute_reply.started": "2022-09-20T15:35:38.432357Z" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "ok\n" ] } ], "source": [ "import pymysql\n", "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_220914.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')\n", " " ] }, { "cell_type": "markdown", "id": "3a8bcc00-867a-4979-a847-898b7d74ba8f", "metadata": { "execution": { "iopub.execute_input": "2022-09-16T14:13:52.194299Z", "iopub.status.busy": "2022-09-16T14:13:52.193060Z", "iopub.status.idle": "2022-09-16T14:13:52.206727Z", "shell.execute_reply": "2022-09-16T14:13:52.203175Z", "shell.execute_reply.started": "2022-09-16T14:13:52.194189Z" } }, "source": [ "## 比照往年年度人员信息" ] }, { "cell_type": "code", "execution_count": null, "id": "db63511b-0467-4930-92fa-b0fa5c1ffde8", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "\n", "filename = 'data/安庆炼化人员名单.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "filename = 'result.json'\n", "with open(filename,'r') as fl:\n", " dict2 = json.load(fl)\n", "dict3 = {}\n", "for k, v in dict2.items():\n", " #list1 = []\n", " dict3.setdefault(k, {})\n", " dict3[k]['name'] = dict1[k]['name']\n", " dict3[k]['sex'] = dict1[k]['sex']\n", " dict3[k]['unit'] = dict1[k]['unit']\n", " \n", " if 'id_num' in dict1[k].keys():\n", " dict3[k]['id'] =dict1[k]['id_num'] \n", " else:\n", " dict3[k]['birth'] =dict1[k]['birth']\n", " \n", " for k1, v1 in v.items():\n", " \n", " dict3[k][k1] = v1\n", " \n", " \n", "filename = 'data/result_安庆.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": "cf304279-34c9-4086-95cf-e58321dc3210", "metadata": { "tags": [] }, "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')\n", " " ] }, { "cell_type": "markdown", "id": "75affb71-e222-4002-83a5-6ff75258bf74", "metadata": {}, "source": [ "## 比照人员两年成绩" ] }, { "cell_type": "code", "execution_count": 2, "id": "9e29dc46-9c2c-48b9-9847-4e9b535f99ac", "metadata": { "execution": { "iopub.execute_input": "2022-09-20T23:15:17.498487Z", "iopub.status.busy": "2022-09-20T23:15:17.497278Z", "iopub.status.idle": "2022-09-20T23:15:21.393538Z", "shell.execute_reply": "2022-09-20T23:15:21.390926Z", "shell.execute_reply.started": "2022-09-20T23:15:17.498383Z" }, "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 = ['编号','姓名','部门','身高','体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数','身高','体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']\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", " #print(k)\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", " #elif item =='name':\n", " # list2.append(v[item])\n", " else:\n", " list2.append('')\n", " if item in dict1[k].keys():\n", " list3.append(dict1[k][item]['成绩']) \n", " #elif item =='name':\n", " # list2.append(v[item])\n", " else:\n", " list3.append('')\n", " for cj in list3:\n", " list2.append(cj) \n", " list4.append(list2)\n", "filename = 'data/安庆石化成绩对照2209.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) \n", " \n", " " ] }, { "cell_type": "markdown", "id": "2c1c84a7-2ca3-4d1a-ba9c-11c813875d7c", "metadata": {}, "source": [ "## 导出人员成绩至Excel表" ] }, { "cell_type": "markdown", "id": "e4c3fec0-9a02-4229-921b-7cba691871d7", "metadata": {}, "source": [ "### 通过列表写入excel" ] }, { "cell_type": "code", "execution_count": null, "id": "03a9d860-e343-4768-8fda-b11294fbc665", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "\n", "items = ['体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']\n", "title = ['编号','姓名','BMI','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']\n", "filename = 'data/result_135.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", " for item in items:\n", " print(item)\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 = '中石化销售得分情况表.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": "36ceaf73-7f45-4a28-acc8-823e19d27c81", "metadata": {}, "source": [ "### 逐行写入excel" ] }, { "cell_type": "code", "execution_count": null, "id": "f707aaff-993d-4b0f-a653-61e79718fcfc", "metadata": {}, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "\n", "filename = 'all_data.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "list1 = []\n", "for item in dict1:\n", " for k in item.keys():\n", " list1.append(k)\n", "list2 = set(list1)\n", "list2.remove('dw')\n", "list2.remove('sex')\n", "list2.remove('name')\n", "list2.remove('age')\n", "list2.remove('身高')\n", "list2.remove('bh')\n", "col = {}\n", "col['bh'] = 'B'\n", "col['name'] = 'C'\n", "col['sex'] = 'D'\n", "col['age'] = 'E'\n", "col['dw'] = 'A'\n", "s ='FGHIJKLMNOPQRST'\n", "n = 0\n", "for item in list2:\n", " col[item] = s[n]\n", " n += 1\n", "#print(col)\n", "filename = '体检人员得分情况表.xlsx'\n", "wb = openpyxl.Workbook()\n", "sheet = wb.active\n", "sheet['A1'] = '单位'\n", "sheet['B1'] = '测试编号'\n", "sheet['C1'] = '姓名'\n", "sheet['D1'] = '性别'\n", "sheet['E1'] = '年龄'\n", "for k, v in col.items():\n", " if k == '体重':\n", " sheet[f'{v}1'] = 'BMI'\n", " else:\n", " sheet[f'{v}1'] = k\n", "n = 2\n", "for item in dict1:\n", " #sheet[f'A{n}'] = n-1\n", " for k, v in item.items():\n", " if k != '身高':\n", " sheet[f'{col[k]}{n}'] = v\n", " n += 1 \n", "wb.save(filename) \n" ] }, { "cell_type": "markdown", "id": "8656633b-19fe-4723-95d1-07e7af25d1e7", "metadata": {}, "source": [ "## 核对未参加体测人员" ] }, { "cell_type": "code", "execution_count": 7, "id": "b4a130de-5b15-40d2-a515-5d26265d84a8", "metadata": { "execution": { "iopub.execute_input": "2022-11-07T04:15:15.150017Z", "iopub.status.busy": "2022-11-07T04:15:15.148851Z", "iopub.status.idle": "2022-11-07T04:15:15.575052Z", "shell.execute_reply": "2022-11-07T04:15:15.571815Z", "shell.execute_reply.started": "2022-11-07T04:15:15.149902Z" }, "tags": [] }, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "import glob,os\n", "\n", "filename = 'data/济南炼化人员名单.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "list1 = []\n", "fls = glob.glob(f'file/211130/*.pdf')\n", "for fn in fls:\n", " name = os.path.basename(fn).split('.')[0].rjust(5,\"0\")\n", " list1.append(name)\n", "person = []\n", "for k, v in dict1.items():\n", " if k not in list1:\n", " list2 = []\n", " person.append([k,dict1[k]['name'],dict1[k]['sex'],dict1[k]['unit']])\n", "filename = '中石化济南分公司未参加体测人员情况表.xlsx'\n", "title =['测试编号','姓名','性别','部门']\n", "wb = openpyxl.Workbook()\n", "sheet = wb.active\n", "sheet.append(title)\n", "for row in person:\n", " sheet.append(row)\n", " \n", "wb.save(filename)" ] }, { "cell_type": "markdown", "id": "b633b350-3fe7-42d5-a832-b53ec1007a99", "metadata": {}, "source": [ "## 获取单项成绩" ] }, { "cell_type": "code", "execution_count": null, "id": "957aaa4c-ef5f-4ff0-9ff4-a9a1faa8e7fd", "metadata": { "tags": [] }, "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", "list1 = []\n", "title = ['测试编号','姓名','性别','部门','BMI得分']\n", "for k, v in dict1.items():\n", " #print(k)\n", " if '体重' in v.keys() and v['体重']['得分'] is not None and v['体重']['得分'] < 3 :\n", " #print(k,v['体重']['得分'])\n", " list1.append([k,v['name'],v['sex'],v['unit'],v['体重']['得分']])\n", "#print(list1)\n", "filename = 'data/安庆BMI不合格人员.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": "3a0188f1-bddf-4465-a886-e4b39f68a4fd", "metadata": {}, "source": [ "## 获取BMI值" ] }, { "cell_type": "code", "execution_count": null, "id": "79b0ec91-e7c3-434c-afde-34a26d286a8d", "metadata": { "tags": [] }, "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", "list1 = []\n", "title = ['测试编号','姓名','性别','部门','BMI得分','BMI值','超重参考']\n", "for k, v in dict1.items():\n", " #print(k)\n", " if '体重' in v.keys() and v['体重']['得分'] is not None and v['体重']['得分'] < 3 :\n", " h = v['身高']['成绩'].split(' ')[0]\n", " w = v['体重']['成绩'].split(' ')[0]\n", " bmi = float(w)/(float(h)/100)**2\n", " #print(k,v['name'],h,w,bmi)\n", " if bmi > 22.00: \n", " if bmi >=24.00 and bmi<28.00:\n", " pd = '偏胖'\n", " if bmi >=28:\n", " pd = '肥胖'\n", " s = \"{:.2f}\".format(bmi)\n", " print(k,v['体重']['得分'],s,pd)\n", " list1.append([k,v['name'],v['sex'],v['unit'],v['体重']['得分'],s,pd])\n", "filename = 'data/安庆BMI不合格人员.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": "95df2637-7898-4446-bb8a-70d881bd9e44", "metadata": {}, "source": [ "## 根据excel表转换测试成绩" ] }, { "cell_type": "code", "execution_count": null, "id": "5d214e99-b3eb-4079-97b5-a9da12b06e89", "metadata": { "tags": [] }, "outputs": [], "source": [ "import openpyxl\n", "import json\n", "\n", "\n", "\n", "filename = 'item.json'\n", "item = {}\n", "unit = {}\n", "\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl) \n", "for v in dict1.values():\n", " #item[k] = v\n", " item[v['name']] = v['divisor']\n", " #print(v['divisor'])\n", "\n", "filename = 'data/长岭全成绩.xlsx'\n", "wb = openpyxl.load_workbook(filename)\n", "sheet = wb.active\n", "\n", "dict1 = {}\n", "for n in range(2, sheet.max_row+1):\n", " bh = sheet.cell(n, 1).value\n", " #print(bh)\n", " dict1.setdefault(bh, {})\n", " dict2 = {}\n", " dict1[bh]['bm'] = sheet.cell(n, 2).value\n", " dict1[bh]['name'] = sheet.cell(n, 3).value\n", " #dict2 = {}\n", " m_xm = sheet.cell(n, 4).value\n", " list1 = []\n", " \n", " list1.append(sheet.cell(n, 5).value/ item[sheet.cell(n, 4).value]) \n", " list1.append(sheet.cell(n, 6).value)\n", " dict1[bh][m_xm] = list1\n", "wb.close()\n", "filename = 'data/result_cl.json'\n", "with open(filename,'w') as fl:\n", " json.dump(dict1, fl,ensure_ascii=False) \n", "print('ok')\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "id": "a7cf5e57-a381-4911-96ff-1e1469b6f9bc", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "\n", "filename = 'data/result_cl.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "list1 = []\n", "for item in dict1.values():\n", " for k in item.keys():\n", " list1.append(k)\n", "list2 = set(list1)\n", "#list2.remove('name')\n", "#list2.remove('bm')\n", "list2.remove('身高')\n", "list2.remove('体重')\n", "#print(list2)\n", "\n", "col = {}\n", "col1 = {}\n", "\n", "s ='GHIJKLMNOPQRSTUVWXYZ'\n", "n = 0\n", "for item in list2:\n", " col[item] = s[n]\n", " col1[item] = s[n+1]\n", " n += 2\n", "#print(col)\n", "filename = 'data/cl人员得分情况表.xlsx'\n", "wb = openpyxl.Workbook()\n", "sheet = wb.active\n", "sheet['A1'] = '测试编号'\n", "sheet['B1'] = '部门名称'\n", "sheet['C1'] = '姓名'\n", "sheet['D1'] = '身高'\n", "sheet['E1'] = '体重'\n", "sheet['F1'] = 'BMI'\n", "for k, v in col.items():\n", " sheet[f'{v}1'] = k\n", " #sheet[f'{v[1]}1'] = '得分'\n", "n = 2\n", "for k,v in dict1.items():\n", " #sheet[f'A{n}'] = n-1 \n", " #print(k,v)\n", " sheet[f'A{n}'] = k\n", " sheet[f'B{n}'] = v['bm']\n", " sheet[f'C{n}'] = v['name']\n", " if '身高' in v.keys():\n", " sheet[f'D{n}'] = v['身高'][0]\n", " if '体重' in v.keys():\n", " sheet[f'E{n}'] = v['体重'][0]\n", " sheet[f'F{n}'] = v['体重'][1]\n", " for xm in col.keys():\n", " if xm in v.keys():\n", " #print(v[xm][0])\n", " #print(v[xm][1])\n", " sheet[f'{col[xm]}{n}'] = v[xm][0] \n", " sheet[f'{col1[xm]}{n}'] = v[xm][1]\n", " n += 1 \n", "\n", "\n", "wb.save(filename)" ] }, { "cell_type": "markdown", "id": "85072cce-72a2-4494-8c99-bacd65024546", "metadata": {}, "source": [ "## 根据excel表查询人员测试成绩" ] }, { "cell_type": "code", "execution_count": null, "id": "42288b9a-5680-4f34-a4b8-26e85c24219d", "metadata": {}, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "\n", "# 获取人员信息\n", "filename = 'data/安庆炼化人员名单.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "list1 = []\n", "person = {}\n", "\n", "for k, v in dict1.items():\n", " person[k] = v['name'].strip()+' '+v['unit'].strip()\n", "#print(person)\n", "# 获取符合条件人员信息\n", "dict1 = {}\n", "filename = 'data/一人一策汇总(监测项目统计)2022.xlsx'\n", "wb = openpyxl.load_workbook(filename)\n", "sheet = wb.active\n", "for n in range(4, sheet.max_row+1):\n", " name = sheet.cell(n, 3).value\n", " unit = sheet.cell(n, 2).value\n", " #print(name)\n", " s = name.strip()+' '+unit.strip()\n", " if s in person.values():\n", " #print(name,unit)\n", " list1.append(s)\n", " elif name in person.values() and unit not in person.values():\n", " print(name,'部门不一致')\n", " else:\n", " print(name,'not found')\n", "for item in list1:\n", " for k, v in person.items():\n", " if item == v:\n", " dict1[k] = v.split(' ')[0]\n", "print(dict1)" ] }, { "cell_type": "markdown", "id": "43cc57b0-aebc-4315-b48f-9268e754bebb", "metadata": {}, "source": [ "## 读取体测报告信息" ] }, { "cell_type": "code", "execution_count": null, "id": "5ac5e20c-c836-4ea4-a62c-acafbdb636e0", "metadata": { "tags": [] }, "outputs": [], "source": [ "import pdfplumber\n", "\n", "# 读取 PDF 文档\n", "pdf = pdfplumber.open(\"file/211027/114.pdf\")\n", "\n", "# 获取页数\n", "print(\"总页数:\",len(pdf.pages))\n", "print(\"-----------------------------------------\")\n", "n = len(pdf.pages)\n", "# 读取第 4 页;索引从 0开始\n", "page = pdf.pages[n-2] \n", "print(\"本页:\",page.page_number)\n", "print(\"-----------------------------------------\")\n", "text = page.extract_text()\n", "#for s in text:\n", "# print(s)\n", "print(text)\n", "print(text.split('\\n'))" ] }, { "cell_type": "code", "execution_count": null, "id": "957b1771-7da1-4ecd-a2b8-889c288b2789", "metadata": { "tags": [] }, "outputs": [], "source": [ "import pdfplumber\n", "import pymysql\n", "\"\"\"获取人员测试成绩\"\"\"\n", "user_id = 5\n", "place_id =120\n", "db = pymysql.connect(\"localhost\",\"root\",\"songyi\",\"ydyb\" )\n", "cursor = db.cursor()\n", "sql = f'SELECT a.item_id,a.performance,a.score,a.date FROM places_result AS a WHERE a.place_id={place_id} AND a.avatar_id={user_id}'\n", "cursor.execute(sql)\n", "re_ta = {}\n", "print(\"\\n运动项目信息:\")\n", "results = cursor.fetchall()\n", "for result in results:\n", "# print (\"%d--%s\" %(result[0],result[1]))\n", " re_ta[result[0]] = result[1]\n", "\n", "dict1 = {}\n", "\n", "# 读取 PDF 文档\n", "pdf = pdfplumber.open(\"5.pdf\")\n", "\n", "# 获取页数\n", "num = len(pdf.pages)\n", "page = pdf.pages[0] \n", "text = page.extract_text()\n", "dict1['name'] = text.split('\\n')[2]\n", "dict1['sn'] = text.split('\\n')[4]\n", "\n", "\n", "print(dict1)" ] }, { "cell_type": "markdown", "id": "81b0babc-5da8-43b2-b81a-61db0e7e301b", "metadata": { "execution": { "iopub.execute_input": "2021-10-12T13:21:30.438009Z", "iopub.status.busy": "2021-10-12T13:21:30.437074Z", "iopub.status.idle": "2021-10-12T13:21:30.449886Z", "shell.execute_reply": "2021-10-12T13:21:30.447584Z", "shell.execute_reply.started": "2021-10-12T13:21:30.437900Z" } }, "source": [ "## 体测项目信息" ] }, { "cell_type": "code", "execution_count": null, "id": "6531259c-9727-44f7-9ec3-d6dbe9b76987", "metadata": { "tags": [] }, "outputs": [], "source": [ "import pymysql\n", "import json\n", "\n", "db = pymysql.connect(\"localhost\",\"root\",\"songyi\",\"ydyb\" )\n", "cursor = db.cursor()\n", "sql = \"SELECT a.id,a.name, b.name,b.divisor FROM items AS a,items_unit AS b WHERE a.unit_id = b.id\"\n", "cursor.execute(sql)\n", "dict1 = {}\n", "\n", "results = cursor.fetchall()\n", "for result in results:\n", "# print (\"%d--%s\" %(result[0],result[1]))\n", " item = {}\n", " id = result[0]\n", " dict1.setdefault(id,{})\n", " item['name'] = result[1]\n", " item['unit'] = result[2]\n", " item['divisor'] = result[3]\n", " dict1[id] = item\n", "filename = 'item.json'\n", "with open(filename,'w') as fl:\n", " json.dump(dict1, fl,ensure_ascii=False) \n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl) \n", "for k,v in dict1.items():\n", " print(k,v)" ] }, { "cell_type": "code", "execution_count": null, "id": "9af74d66-b410-4fbf-afcd-9884174e6841", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "filename = 'data/result_135.json'\n", "item = {}\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl) \n", "print(len(dict1))" ] }, { "cell_type": "markdown", "id": "c47e9547-d896-4fe2-8f70-8635c92fa792", "metadata": {}, "source": [ "## 压缩体测报告" ] }, { "cell_type": "code", "execution_count": null, "id": "1ccab0f2-448b-4423-ae21-aa1c0f6470da", "metadata": { "tags": [] }, "outputs": [], "source": [ "from pdf2image import convert_from_path, convert_from_bytes\n", "import img2pdf \n", "import glob\n", "import os,sys\n", "import tempfile\n", "from pdf2image.exceptions import (\n", " PDFInfoNotInstalledError,\n", " PDFPageCountError,\n", " PDFSyntaxError\n", ")\n", "#images = convert_from_path('1.pdf',dpi=200,fmt='jpg', output_folder='./sample_data')\n", "fl_path = 'file/split'\n", "new_path ='file/new_split'\n", "old = glob.glob(f'{fl_path}/*.pdf')\n", "old.sort()\n", "for old_file in old:\n", " s = os.path.basename(old_file).split('.')[0].rjust(5,'0')\n", " new_file = f'{new_path}/{s}.pdf'\n", " \n", " with tempfile.TemporaryDirectory() as path:\n", " images_from_path = convert_from_path(old_file, dpi=100,fmt='jpg', output_folder=path)\n", " fl=glob.glob(f'{path}/*.jpg')\n", " fl.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_file,\"wb\") as f:\n", " f.write(img2pdf.convert(fl,layout_fun=layout_fun))\n", "\n", "\n", " #print(path)\n", "\n", " print(new_file,'ok')\n", "#print(old)\n" ] }, { "cell_type": "markdown", "id": "9f572c02-4a9b-42c1-b6c5-e37f41bbeca1", "metadata": {}, "source": [ "## 上传体测报告" ] }, { "cell_type": "code", "execution_count": null, "id": "809fa112-1bf8-4509-a5a6-cfad88f9cbf5", "metadata": { "tags": [] }, "outputs": [], "source": [ "import glob\n", "import os,sys\n", "import pymongo\n", "from gridfs import GridFS\n", "from bson.objectid import ObjectId\n", "\n", "myclient = pymongo.MongoClient('mongodb://localhost:27017/')\n", "mydb = myclient[\"tice\"]\n", "mycol = mydb[\"person\"]\n", "#体质监测编号\n", "code = '122'\n", "UploadCache = \"uploadcache\"\n", "dbURL = \"mongodb://localhost:27017\"\n", "\n", "#上传文件\n", "def upLoadFile(file_coll,file_name,data_link):\n", " \n", " filter_condition = {\"filename\": code + '-' + os.path.basename(file_name).rjust(9,\"0\"), \"url\": data_link}\n", " gridfs_col = GridFS(mydb, collection=file_coll)\n", " file_ = \"0\"\n", " query = {\"filename\":\"\"}\n", " query[\"filename\"] = filter_condition[\"filename\"]#file_name\n", "\n", " if gridfs_col.exists(query):\n", " print('已经存在该文件')\n", " else:\n", "\n", " with open(file_name, 'rb') as file_r:\n", " file_data = file_r.read()\n", " file_ = gridfs_col.put(data=file_data, **filter_condition) # 上传到gridfs\n", "\n", " print(file_)\n", "\n", "\n", " return file_ \n", "\n", "\n", "dict1 = {}\n", "list1 = []\n", "\n", "fl_path = 'file/211130'\n", "fl=glob.glob(f'{fl_path}/*.pdf')\n", "fl.sort()\n", "for fi in fl:\n", " dict1 = {}\n", " s = os.path.basename(fi).split('.')[0]\n", " ss = s.rjust(5,\"0\")\n", " print(fi,ss) \n", " sss = upLoadFile(\"report\",fi,\"\") \n", " \n", " myquery = {f'exam.{code}.sn':ss}\n", " mycol.update_one(myquery,{'$set':{f'exam.{code}.report':sss}},True)\n", " \n" ] }, { "cell_type": "markdown", "id": "8af1a4bc-2aee-46bd-9f8c-b7f26093541b", "metadata": {}, "source": [ "## 查询体测报告" ] }, { "cell_type": "code", "execution_count": null, "id": "1c802046-3931-444a-8a66-75a853ac2467", "metadata": { "tags": [] }, "outputs": [], "source": [ "import glob\n", "import os,sys\n", "import pymongo\n", "from gridfs import GridFS\n", "\n", "\n", "myclient = pymongo.MongoClient('mongodb://localhost:27017/')\n", "mydb = myclient[\"tice\"]\n", "mycol = mydb[\"event\"]\n", "sn = '00005'\n", "s = f'report.{sn}'\n", "myquery = {s:{'$exists':True},'code':120}\n", "x = mycol.find_one(myquery,{s:1})\n", "if x:\n", " print(x['report'][sn])\n", "else:\n", " print('no record!')\n", "#print(type(x))" ] }, { "cell_type": "markdown", "id": "4d255389-bc5c-4251-861e-3a4d65bf5c26", "metadata": { "tags": [] }, "source": [ "## 根据体测报告生成分组表" ] }, { "cell_type": "code", "execution_count": null, "id": "ed6b40e9-4c5f-4d1f-8810-9f519a8755b0", "metadata": { "tags": [] }, "outputs": [], "source": [ "import openpyxl\n", "import json\n", "import os,sys,shutil\n", "import glob\n", "\n", "fl=glob.glob('./file/211130/*.pdf')\n", "list1 = []\n", "for fi in fl:\n", " s = os.path.basename(fi).split('.')[0]\n", " list1.append(int(s))\n", "list1.sort()\n", "#print(list1)\n", "wb = openpyxl.load_workbook('data/济南炼化.xlsx')\n", "sheet = wb.active\n", "# sheets = wb.sheetnames\n", "depart = []\n", "dict1 = {}\n", "new_code = []\n", "for n in range(2, sheet.max_row+1):\n", " m_depart = sheet.cell(n,5).value\n", " dict2 = {}\n", " dict1.setdefault(m_depart,[])\n", " dict2[sheet.cell(n,1).value] = sheet.cell(n,2).value\n", " dict1[m_depart].append(dict2)\n", "wb = openpyxl.Workbook()\n", "\n", "sheet = wb.active\n", "i = 1\n", "\n", "for k , v in dict1.items():\n", " sheet[f'A{i}'] = k\n", " i += 1\n", " for item in v:\n", " for k1, v1 in item.items():\n", " if k1 in list1:\n", " sheet[f'A{i}'] = str(k1).rjust(5,\"0\")\n", " sheet[f'B{i}'] = v1\n", " i += 1\n", "wb.save('./data/济南炼化体测报告部门明细表.xlsx')\n", "#print(dict1)\n" ] }, { "cell_type": "markdown", "id": "3711130b-59e3-4844-ac31-234ba77cd46c", "metadata": { "jp-MarkdownHeadingCollapsed": true, "tags": [], "toc-hr-collapsed": true }, "source": [ "## 脊柱症状统计" ] }, { "cell_type": "markdown", "id": "c67fc14e-ccf8-41c5-a0f8-0c3a664eb484", "metadata": {}, "source": [ "### 脊椎代码表导入" ] }, { "cell_type": "code", "execution_count": null, "id": "1d98a8d7-c888-4630-abec-de85851e4342", "metadata": { "tags": [] }, "outputs": [], "source": [ "import openpyxl\n", "import json\n", " \n", "wb = openpyxl.load_workbook('file/脊柱症状自我诊断表代码表.xlsx')\n", "sheet = wb.active\n", "#sheets = wb.sheetnames\n", "dict1 = {}\n", "for n in range(1,sheet.max_row+1):\n", " dict1[sheet.cell(n,1).value] = sheet.cell(n,2).value \n", "filename = '脊柱症状自我诊断表代码表.json'\n", "with open(filename,'w') as fl:\n", " json.dump(dict1, fl,ensure_ascii=False) \n", "print(dict1)\n" ] }, { "cell_type": "markdown", "id": "36717021-5c0e-40d6-8988-dfe8ec309275", "metadata": {}, "source": [ "### 脊椎症状自我诊断表导入" ] }, { "cell_type": "code", "execution_count": null, "id": "9e33d1bc-1b71-47f7-928a-16ec435449d6", "metadata": { "tags": [] }, "outputs": [], "source": [ "import openpyxl\n", "import json\n", "\n", "with open('脊柱症状自我诊断表代码表.json','r') as fl:\n", " dm = json.load(fl)\n", "wb = openpyxl.load_workbook('file/脊柱症状自我诊断表统计.xlsx')\n", "sheet = wb.active\n", "#sheets = wb.sheetnames\n", "dict1 = {}\n", "for n in range(1,sheet.max_row+1):\n", " mdm = sheet.cell(n,1).value\n", " dict1.setdefault(mdm,{})\n", " dict2 = {}\n", " list1 = []\n", " for i in range(2,36):\n", " if sheet.cell(n,i).value is None:\n", " break\n", " else:\n", " s = str(sheet.cell(n,i).value)\n", " if s.isnumeric(): \n", " list1.append(dm[s])\n", " else:\n", " dict2['备注'] = s\n", " dict2['症状'] = list1\n", " dict1[mdm] = dict2\n", "filename = '脊柱症状自我诊断表统计.json'\n", "with open(filename,'w') as fl:\n", " json.dump(dict1, fl,ensure_ascii=False) \n", "print('ok')" ] }, { "cell_type": "markdown", "id": "ae25fffb-4682-49b1-90aa-218504ac88d7", "metadata": {}, "source": [ "### 脊椎症状自评代码矩阵生成" ] }, { "cell_type": "code", "execution_count": null, "id": "5e49d9c5-69cc-42dc-b872-738b6985f7a3", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "\n", "wb = openpyxl.load_workbook('data/脊椎症状自评矩阵代码表.xlsx')\n", "sheet = wb.active\n", "dict1 = {}\n", "\n", "for n in range(2,sheet.max_row+1):\n", " mxh = sheet.cell(n,1).value\n", " dict1.setdefault(mxh,{})\n", " mwt = sheet.cell(n,2).value\n", " mtj = sheet.cell(n,3).value\n", " mdm = sheet.cell(n,4).value\n", " dict1[mxh]['代码'] = mdm\n", " dict1[mxh]['问题'] = mwt\n", " dict1[mxh]['条件'] = mtj\n", " \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": "7520a013-d31b-46fc-af9d-91740d24b0f0", "metadata": { "execution": { "iopub.execute_input": "2021-11-09T23:24:59.628916Z", "iopub.status.busy": "2021-11-09T23:24:59.627689Z", "iopub.status.idle": "2021-11-09T23:24:59.638848Z", "shell.execute_reply": "2021-11-09T23:24:59.636589Z", "shell.execute_reply.started": "2021-11-09T23:24:59.628807Z" } }, "source": [ "### 脊椎症状自评数据矩阵生成" ] }, { "cell_type": "code", "execution_count": null, "id": "61f92c63-d359-4c4b-ad64-9b8268a3e992", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "dict1 = {}\n", "dict1['颈椎'] = 1000\n", "dict1['胸椎'] = 100\n", "dict1['腰椎'] = 10\n", "dict1['骶尾椎'] = 1\n", "dict_all = {}\n", "\n", "filename = '脊柱症状自我诊断表统计.json'\n", "with open(filename,'r') as fl:\n", " dict2 = json.load(fl) \n", "\n", "list_all = dict2.keys()\n", "filename = '脊柱症状统计汇总表.json'\n", "with open(filename,'r') as fl:\n", " dict2 = json.load(fl) \n", "list_zz = dict2.keys()\n", "sorted(list_all)\n", "for item in list_all:\n", " if item not in list_zz:\n", " dict_all[item] = '0000'\n", " else:\n", " m_sum = 0\n", " for item1 in dict2[item]:\n", " m_sum += dict1[item1]\n", " dict_all[item] = str(m_sum).rjust(4,'0')\n", "filename = 'data/脊柱症状自评数据矩阵.json'\n", "with open(filename,'w') as fl:\n", " json.dump(dict_all, fl,ensure_ascii=False) \n", "print('ok') \n", "print(len(dict_all))\n", " " ] }, { "cell_type": "markdown", "id": "bdc4673c-a0e2-4c8c-913a-47e39c7a366e", "metadata": {}, "source": [ "### 分部门、性别人数统计" ] }, { "cell_type": "code", "execution_count": null, "id": "908302d5-252d-403e-80e5-fdc0694061b8", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "import pymysql\n", "import json\n", "\n", "db = pymysql.connect(\"localhost\",\"root\",\"songyi\",\"ydyb\" )\n", "cursor = db.cursor()\n", "\n", "fi_xls = 'data/北海炼化名单表(前后台).xlsx'\n", "wb = openpyxl.load_workbook(fi_xls)\n", "sheet = wb.active\n", "depart = {}\n", "m_xx ={}\n", "for n in range(2,sheet.max_row+1): \n", " m_dm = str(sheet.cell(n,1).value)\n", " m_xb = sheet.cell(n,3).value\n", " m_depart = sheet.cell(n,6).value\n", " depart[m_dm] = m_depart\n", " m_xx[m_dm] = [m_xb,m_depart] #人员信息\n", " \n", "filename = 'data/脊柱症状自评代码矩阵.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "dict2 = dict1.values()\n", "dm = {}\n", "for item in dict2:\n", " dm[item['代码']] = item['问题']\n", "print(dm)\n", "list_dm = dm.keys()\n", "filename = 'data/脊柱症状自评数据矩阵.json'\n", "with open(filename,'r') as fl:\n", " data = json.load(fl)\n", "# 生成人员信息表,含性别、部门\n", "list1 = []\n", "for k, v in data.items():\n", " list2 = []\n", " list2.append(k)\n", " list2.append(m_xx[k][0])\n", " list2.append(m_xx[k][1])\n", " list2.append(v)\n", " list1.append(list2)\n", "\n", "'''sql = 'insert into tongji(ygdm,xb,bm,jzdm) values(%s,%s,%s,%s)'\n", "#try:\n", " # 执行sql语句\n", "cursor.executemany(sql, list1)\n", " # 提交到数据库执行\n", "db.commit()\n", "#except :\n", " # 如果发生错误则回滚\n", "# db.rollback()\n", "# 关闭游标\n", "cursor.close()\n", "# 关闭数据库连接\n", "db.close()'''\n", "sql = 'SELECT bm,xb,jzdm,COUNT(jzdm) FROM tongji where bm=\"管理部门\" GROUP BY bm,jzdm,xb ORDER BY jzdm,xb'\n", "cursor.execute(sql)\n", "results = cursor.fetchall()\n", "result = {}\n", "print('管理部门')\n", "for row in results:\n", " result.setdefault(row[2],{})\n", " result[row[2]][row[1]] = row[3]\n", "#print(result) \n", "for k, v in dm.items():\n", " if k in result.keys():\n", " if '男' in result[k].keys():\n", " nan = result[k]['男']\n", " else:\n", " nan = 0\n", " if '女' in result[k].keys():\n", " nv = result[k]['女']\n", " else:\n", " nv = 0\n", " print(v,'男',nan,'女',nv)\n", " else:\n", " print(v,'男',0,'女',0)\n", "\n", "sql = 'SELECT bm,xb,jzdm,COUNT(jzdm) FROM tongji where bm=\"一线部门\" GROUP BY bm,jzdm,xb ORDER BY jzdm,xb'\n", "cursor.execute(sql)\n", "results = cursor.fetchall()\n", "result = {}\n", "print('一线部门')\n", "for row in results:\n", " result.setdefault(row[2],{})\n", " result[row[2]][row[1]] = row[3]\n", "#print(result) \n", "for k, v in dm.items():\n", " if k in result.keys():\n", " if '男' in result[k].keys():\n", " nan = result[k]['男']\n", " else:\n", " nan = 0\n", " if '女' in result[k].keys():\n", " nv = result[k]['女']\n", " else:\n", " nv = 0\n", " print(v,'男',nan,'女',nv)\n", " else:\n", " print(v,'男',0,'女',0)\n", "\n" ] }, { "cell_type": "markdown", "id": "3e3a3d27-7703-484e-ae47-add0e9367cfe", "metadata": {}, "source": [ "### 脊椎症状自评数据统计(人数)" ] }, { "cell_type": "code", "execution_count": null, "id": "664507fd-6f9c-44fd-8939-6d743e47cb81", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "\n", "fi_xls = 'data/北海炼化名单表(前后台).xlsx'\n", "wb = openpyxl.load_workbook(fi_xls)\n", "sheet = wb.active\n", "depart = {}\n", "for n in range(2,sheet.max_row+1): \n", " m_dm = str(sheet.cell(n,1).value)\n", " m_depart = sheet.cell(n,6).value\n", " depart[m_dm] = m_depart\n", " \n", "filename = 'data/脊柱症状自评代码矩阵.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "dict2 = dict1.values()\n", "dm = {}\n", "for item in dict2:\n", " dm[item['代码']] = item['问题']\n", "print(dm)\n", "list_dm = dm.keys()\n", "filename = 'data/脊柱症状自评数据矩阵.json'\n", "with open(filename,'r') as fl:\n", " data = json.load(fl)\n", "dict_tj = {}\n", "for k, v in data.items():\n", " dict_tj.setdefault(v,0)\n", " dict_tj[v] +=1\n", "\n", "\n", "result = {}\n", "for k, v in data.items():\n", " result.setdefault(depart[k],{})\n", " result[depart[k]].setdefault(v,0)\n", " result[depart[k]][v] += 1\n", "#new_dict = sorted(result.items(), key = lambda kv:(kv[1], kv[0]),reverse=True) \n", "#print(part)\n", "print(result)\n", "wb = openpyxl.Workbook()\n", "m_totle = 0\n", "sheet = wb.active\n", "i = 1\n", "for k, v in result.items():\n", " print(k)\n", " dict3 = {}\n", " for k1, v1 in v.items():\n", " dict3[k1] = v1\n", " for m_dm in dm:\n", " if m_dm in dict3.keys():\n", " print(dm[m_dm],dict3[m_dm])\n" ] }, { "cell_type": "markdown", "id": "3aa7243c-1d20-4a0c-b6b1-bce6ca110222", "metadata": {}, "source": [ "### 导入基础数据" ] }, { "cell_type": "code", "execution_count": null, "id": "c30ad0bb-1119-4ab4-8c3c-254a4b246d28", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "\n", "## 导入脊椎症状对照表\n", "wb = openpyxl.load_workbook('file/脊椎症状对应表.xlsx')\n", "sheet = wb.active\n", "dict1 = {}\n", "'''for n in range(2,sheet.max_row+1):\n", " mjz = sheet.cell(n,1).value\n", " dict1.setdefault(mjz,[])\n", " dict1[mjz].append(sheet.cell(n,2).value)\n", "#print(dict1)'''\n", "for n in range(2,sheet.max_row+1):\n", " mzz = sheet.cell(n,2).value\n", " mjz = sheet.cell(n,1).value\n", " dict1[mzz] = mjz\n", "#print(dict1)\n", "filename = '脊柱症状自我诊断表统计.json'\n", "result = {}\n", "with open(filename,'r') as fl:\n", " dict2 = json.load(fl) \n", "#print(dict1)\n", "for k, v in dict2.items():\n", " result.setdefault(k,[])\n", " for k1, v1 in v.items(): \n", " for zz in v1:\n", " if zz in dict1.keys() and dict1[zz] not in result[k]:\n", " result[k].append(dict1[zz])\n", "\n", "for k in list(result.keys()):\n", " if not result.get(k):\n", " del result[k]\n", "#print(result)\n", "filename = '脊柱症状统计汇总表.json'\n", "with open(filename,'w') as fl:\n", " json.dump(result, fl,ensure_ascii=False) \n", "print('ok')" ] }, { "cell_type": "markdown", "id": "10fe9b36-5853-45ce-b291-f6259109fac0", "metadata": {}, "source": [ "### 统计人数(脊椎)" ] }, { "cell_type": "code", "execution_count": null, "id": "e05247bb-1b03-486a-9c59-52882964231e", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "import os,sys,shutil\n", "\n", "## 导入脊椎症状对照表\n", "wb = openpyxl.load_workbook('file/脊椎症状对应表.xlsx')\n", "sheet = wb.active\n", "dict1 = {}\n", "for n in range(2,sheet.max_row+1):\n", " mzz = sheet.cell(n,2).value\n", " mjz = sheet.cell(n,1).value\n", " dict1[mzz] = mjz\n", "fi_xls = os.getcwd() + '/北海炼化名单表(202110).xlsx'\n", "wb = openpyxl.load_workbook(fi_xls)\n", "sheet = wb.active\n", "depart = {}\n", "part = []\n", "for n in range(2,sheet.max_row+1): \n", " m_dm = str(sheet.cell(n,1).value)\n", " m_depart = sheet.cell(n,5).value\n", " depart[m_dm] = m_depart\n", " if m_depart not in part:\n", " part.append(m_depart)\n", "filename = '脊柱症状统计汇总表.json'\n", "with open(filename,'r') as fl:\n", " dict2 = json.load(fl) \n", "result = {}\n", "#print(dict2)\n", "for k, v in dict2.items():\n", " result.setdefault(depart[k],{})\n", " for v1 in v:\n", " result[depart[k]].setdefault(v1,0)\n", " result[depart[k]][v1] += 1\n", "#print(part)\n", "print(result)\n", "wb = openpyxl.Workbook()\n", "m_totle = 0\n", "sheet = wb.active\n", "i = 1\n", "for name in part:\n", " m_sum = 0\n", " sheet[f'A{i}'] = name\n", " i +=1\n", " sheet[f'A{i}'] = '脊椎'\n", " sheet[f'B{i}'] = '人数'\n", " i +=1\n", " new_dict = sorted(result[name].items(), key = lambda kv:(kv[1], kv[0]),reverse=True)\n", " for k, v in new_dict:\n", " sheet[f'A{i}'] = k\n", " sheet[f'B{i}'] = v\n", " i +=1\n", " m_sum +=v\n", " sheet[f'A{i}'] = '合计'\n", " sheet[f'B{i}'] = m_sum\n", " m_totle = m_totle + m_sum\n", " i +=2\n", "sheet[f'A{i}'] = '总计'\n", "sheet[f'B{i}'] = m_totle\n", "wb.save('test4.xlsx')" ] }, { "cell_type": "markdown", "id": "b5e86c3b-d81a-418c-85b5-28f6fd524ba4", "metadata": {}, "source": [ "### 统计全员人数(脊椎)" ] }, { "cell_type": "code", "execution_count": null, "id": "761715db-8d24-44e5-9c0e-11df553aa414", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "import os,sys,shutil\n", "\n", "## 导入脊椎症状对照表\n", "wb = openpyxl.load_workbook('file/脊椎症状对应表.xlsx')\n", "sheet = wb.active\n", "dict1 = {}\n", "\n", "filename = '脊柱症状统计汇总表.json'\n", "with open(filename,'r') as fl:\n", " dict2 = json.load(fl) \n", "result = {}\n", "#print(dict2)\n", "for k, v in dict2.items(): \n", " for v1 in v:\n", " result.setdefault(v1,0)\n", " result[v1] += 1\n", "#print(part)\n", "print(result)\n", "wb = openpyxl.Workbook()\n", "m_sum = 0\n", "sheet = wb.active\n", "i = 1\n", "sheet[f'A{i}'] = name\n", "i +=1\n", "sheet[f'A{i}'] = '脊椎'\n", "sheet[f'B{i}'] = '人数'\n", "i +=1\n", "new_dict = sorted(result.items(), key = lambda kv:(kv[1], kv[0]),reverse=True)\n", "for k, v in new_dict:\n", " sheet[f'A{i}'] = k\n", " sheet[f'B{i}'] = v\n", " i +=1\n", " m_sum +=v\n", "sheet[f'A{i}'] = '合计'\n", "sheet[f'B{i}'] = m_sum\n", "\n", "wb.save('test4.xlsx')" ] }, { "cell_type": "markdown", "id": "832cb4de-cae2-459f-bd16-1c59247614a3", "metadata": {}, "source": [ "### 统计人数(症状)" ] }, { "cell_type": "code", "execution_count": null, "id": "50004904-b326-4e25-819f-81748302d1fe", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "import os,sys,shutil\n", "\n", "## 导入脊椎症状对照表\n", "\n", "wb = openpyxl.load_workbook('file/脊椎症状对应表.xlsx')\n", "sheet = wb.active\n", "dict1 = {}\n", "for n in range(2,sheet.max_row+1):\n", " mzz = sheet.cell(n,2).value\n", " mjz = sheet.cell(n,1).value\n", " dict1[mzz] = mjz\n", "fi_xls = os.getcwd() + '/北海炼化名单表(202110).xlsx'\n", "wb = openpyxl.load_workbook(fi_xls)\n", "sheet = wb.active\n", "depart = {}\n", "part = []\n", "for n in range(2,sheet.max_row+1): \n", " m_dm = str(sheet.cell(n,1).value)\n", " m_depart = sheet.cell(n,5).value\n", " depart[m_dm] = m_depart\n", " if m_depart not in part:\n", " part.append(m_depart)\n", "filename = '脊柱症状自我诊断表统计.json'\n", "result = {}\n", "with open(filename,'r') as fl:\n", " dict2 = json.load(fl) \n", "#print(dict1)\n", "for k, v in dict2.items():\n", " result.setdefault(k,[])\n", " for k1, v1 in v.items(): \n", " for zz in v1:\n", " if zz in dict1.keys():\n", " result[k].append(zz)\n", "for k in list(result.keys()):\n", " if not result.get(k):\n", " del result[k]\n", "#print(result)\n", "result1 = {}\n", "#print(dict2)\n", "for k, v in result.items():\n", " result1.setdefault(depart[k],{})\n", " for v1 in v:\n", " result1[depart[k]].setdefault(v1,0)\n", " result1[depart[k]][v1] += 1\n", "#print(result1)\n", "\n", "wb = openpyxl.Workbook()\n", "sheet = wb.active\n", "i = 1\n", "m_totle = 0\n", "for name in part:\n", " sheet[f'A{i}'] = name\n", " i +=1\n", " sheet[f'A{i}'] = '症状'\n", " sheet[f'B{i}'] = '人数'\n", " i +=1\n", " m_sum = 0\n", " new_dict = sorted(result1[name].items(), key = lambda kv:(kv[1], kv[0]),reverse=True)\n", " for k, v in new_dict:\n", " sheet[f'A{i}'] = k\n", " sheet[f'B{i}'] = v\n", " m_sum +=v\n", " i +=1\n", " sheet[f'A{i}'] = '合计'\n", " sheet[f'B{i}'] = m_sum\n", " m_totle = m_totle + m_sum\n", " i +=2\n", "sheet[f'A{i}'] = '总计'\n", "sheet[f'B{i}'] = m_totle\n", "wb.save('test3.xlsx')" ] }, { "cell_type": "markdown", "id": "99fef05f-4141-4fa0-bbaf-bd39acafd68e", "metadata": {}, "source": [ "### 全员统计(症状)" ] }, { "cell_type": "code", "execution_count": null, "id": "31c80cb0-8a8c-408c-a888-cdcbd9963394", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "import os,sys,shutil\n", "\n", "## 导入脊椎症状对照表\n", "\n", "\n", "filename = '脊柱症状自我诊断表统计.json'\n", "result = {}\n", "with open(filename,'r') as fl:\n", " dict2 = json.load(fl) \n", "#print(dict1)\n", "for k, v in dict2.items():\n", " result.setdefault(k,[])\n", " for k1, v1 in v.items(): \n", " for zz in v1:\n", " if zz in dict1.keys():\n", " result[k].append(zz)\n", "for k in list(result.keys()):\n", " if not result.get(k):\n", " del result[k]\n", "\n", "result1 = {}\n", "#print(dict2)\n", "for k, v in result.items():\n", " \n", " for v1 in v:\n", " result1.setdefault(v1,0)\n", " result1[v1] += 1\n", "#print(result1)\n", "\n", "wb = openpyxl.Workbook()\n", "sheet = wb.active\n", "i = 1\n", "m_totle = 0\n", "sheet[f'A{i}'] = name\n", "i +=1\n", "sheet[f'A{i}'] = '症状'\n", "sheet[f'B{i}'] = '人数'\n", "i +=1\n", "m_sum = 0\n", "new_dict = sorted(result1.items(), key = lambda kv:(kv[1], kv[0]),reverse=True)\n", "for k, v in new_dict:\n", " sheet[f'A{i}'] = k\n", " sheet[f'B{i}'] = v\n", " m_sum +=v\n", " i +=1\n", "sheet[f'A{i}'] = '合计'\n", "sheet[f'B{i}'] = m_sum\n", "\n", "wb.save('test3.xlsx')" ] }, { "cell_type": "markdown", "id": "b5c85c50-11cc-4678-b244-ee9022fa6d54", "metadata": {}, "source": [ "### 分症状统计" ] }, { "cell_type": "code", "execution_count": null, "id": "c288cfba-ff44-4cb2-8a77-78ecc45dcb41", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "import os,sys,shutil\n", "\n", "## 导入脊椎症状对照表\n", "\n", "filename = '北海炼化人员名单.json'\n", "renyuan = []\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl) \n", "\n", "zz = '失眠'\n", "filename = '脊柱症状自我诊断表统计.json'\n", "\n", "with open(filename,'r') as fl:\n", " dict2 = json.load(fl) \n", "\n", "for k, v in dict2.items():\n", " if zz in v['症状']:\n", " mdm = str(k).rjust(5,'0')\n", " renyuan.append([mdm,dict1[mdm]['name'],dict1[mdm]['sex'],dict1[mdm]['unit']])\n", "\n", "wb = openpyxl.Workbook()\n", "sheet = wb.active\n", "i = 1\n", "\n", "sheet[f'A{i}'] = '编号'\n", "sheet[f'B{i}'] = '姓名'\n", "sheet[f'C{i}'] = '性别'\n", "sheet[f'D{i}'] = '部门'\n", "i +=1\n", "\n", "for item in renyuan:\n", " sheet[f'A{i}'] = item[0]\n", " sheet[f'B{i}'] = item[1]\n", " sheet[f'C{i}'] = item[2]\n", " sheet[f'D{i}'] = item[3]\n", " \n", " i +=1\n", "\n", "wb.save('file/失眠人员.xlsx')" ] }, { "cell_type": "code", "execution_count": null, "id": "90083246-0378-4816-ace1-8a8a9151c3fc", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "\n", "## 导入脊椎症状对照表\n", "wb = openpyxl.load_workbook('file/脊椎症状对应表.xlsx')\n", "sheet = wb.active\n", "dict1 = {}\n", "'''for n in range(2,sheet.max_row+1):\n", " mjz = sheet.cell(n,1).value\n", " dict1.setdefault(mjz,[])\n", " dict1[mjz].append(sheet.cell(n,2).value)\n", "#print(dict1)'''\n", "for n in range(2,sheet.max_row+1):\n", " mzz = sheet.cell(n,2).value\n", " mjz = sheet.cell(n,1).value\n", " dict1[mzz] = mjz\n", "#print(dict1)\n", "filename = '脊柱症状自我诊断表统计.json'\n", "result = {}\n", "with open(filename,'r') as fl:\n", " dict2 = json.load(fl) \n", "#print(dict1)\n", "for k, v in dict2.items():\n", " result.setdefault(k,[])\n", " for k1, v1 in v.items():\n", " for zz in v1:\n", " print(zz)\n", " " ] }, { "cell_type": "markdown", "id": "f9e61ba9-38f8-4b61-bf1e-4e7bbde4f32c", "metadata": { "tags": [] }, "source": [ "## 心理健康量表统计导入" ] }, { "cell_type": "code", "execution_count": null, "id": "2475a1c3-c2e7-45d6-9685-32e28e606df5", "metadata": { "tags": [] }, "outputs": [], "source": [ "import openpyxl\n", "import json\n", "\n", "wb = openpyxl.load_workbook('file/北海炼化公司职工心理健康量表统计.xlsx')\n", "sheet = wb.active\n", "\n", "dict1 = {}\n", "for n in range(2,sheet.max_row+1):\n", " mdm = sheet.cell(n,1).value\n", " dict1.setdefault(mdm,{})\n", " dict2 = {}\n", " list1 = [1,2,3,4,5,None]\n", " for i in range(2,42):\n", " #if sheet.cell(n,i).value not in list1:\n", " # print(f'error!{mdm}--{sheet.cell(n,i).value}')\n", " dict2[i-1] = sheet.cell(n,i).value\n", " dict1[mdm] = dict2\n", "filename = '北海炼化公司职工心理健康量表统计.json'\n", "with open(filename,'w') as fl:\n", " json.dump(dict1, fl,ensure_ascii=False) \n", "print('ok')" ] }, { "cell_type": "markdown", "id": "f400d470-d51e-4226-a1c4-54ac711c7f38", "metadata": {}, "source": [ "### 查询心理健康量表编号重复" ] }, { "cell_type": "code", "execution_count": null, "id": "61887c54-66be-4158-9721-7a995daf1745", "metadata": { "tags": [] }, "outputs": [], "source": [ "import openpyxl\n", "\n", "wb = openpyxl.load_workbook('file/北海炼化公司职工心理健康量表统计.xlsx')\n", "sheet = wb.active\n", "list1 = []\n", "dict1 = {}\n", "i = 0\n", "for n in range(2,sheet.max_row+1):\n", " mdm = sheet.cell(n,1).value\n", " if mdm in list1:\n", " print(F'{i}-{mdm}已存在!')\n", " else:\n", " list1.append(mdm)\n", " i = i + 1\n", " " ] }, { "cell_type": "markdown", "id": "641cc9a9-45b2-4b81-953c-75d3a27e35d5", "metadata": {}, "source": [ "### 统计导入JSON文件记录数" ] }, { "cell_type": "code", "execution_count": null, "id": "499a41ef-1b1f-4973-b733-8c322ac1ce09", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "filename = '脊柱症状统计汇总表.json'\n", "item = {}\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl) \n", "\n", "print(len(dict1))" ] }, { "cell_type": "markdown", "id": "2d5d65e6-0b14-46a8-8636-ba4755dabafe", "metadata": {}, "source": [ "## 拆分调查报告PDF页面" ] }, { "cell_type": "code", "execution_count": null, "id": "d1b557c1-e34c-4b15-8a5b-fcd5e4b62a64", "metadata": { "tags": [] }, "outputs": [], "source": [ "import pdfplumber\n", "import glob\n", "import os,sys\n", "import json\n", "from PyPDF2 import PdfFileWriter, PdfFileReader, PdfFileMerger\n", "\n", "\n", "filename = '北海炼化公司职工心理健康量表统计.json'\n", "list1 = []\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "'''\n", "for k, v in dict1.items():\n", " if None in v.values():\n", " list1.append(k)\n", "'''\n", "\n", "list1 = dict1.keys()\n", "\n", "fl_path = 'file/211027'\n", "new_path ='file/split/'\n", "old = glob.glob(f'{fl_path}/*.pdf')\n", "old.sort()\n", "\n", "for old_file in old:\n", " name = os.path.basename(old_file).split('.')[0]\n", " if name in list1:\n", " pdfWriter = PdfFileWriter()\n", " pdf_reader = PdfFileReader(old_file)\n", " n = pdf_reader.numPages\n", " pdfWriter.addPage(pdf_reader.getPage(n-2))\n", " split_file = f'{new_path}{name}.pdf'\n", " with open(split_file, 'wb') as pdfOutputFile:\n", " pdfWriter.write(pdfOutputFile)" ] }, { "cell_type": "markdown", "id": "7b6d3d04-2844-4bf4-986c-503d62a39e84", "metadata": {}, "source": [ "## 拆分PDF指定F页" ] }, { "cell_type": "code", "execution_count": null, "id": "664c3aca-74e3-4a07-a141-a1dde3ef96e2", "metadata": {}, "outputs": [], "source": [ "import pdfplumber\n", "import glob\n", "import os,sys\n", "import json\n", "from PyPDF2 import PdfFileWriter, PdfFileReader, PdfFileMerger\n", "\n", "\n", "filename = '北海炼化公司职工心理健康量表统计.json'\n", "list1 = []\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "'''\n", "for k, v in dict1.items():\n", " if None in v.values():\n", " list1.append(k)\n", "'''\n", "\n", "list1 = dict1.keys()\n", "\n", "fl_path = 'file/211027'\n", "new_path ='file/split/'\n", "old = glob.glob(f'{fl_path}/*.pdf')\n", "old.sort()\n", "\n", "for old_file in old:\n", " name = os.path.basename(old_file).split('.')[0]\n", " pdfWriter = PdfFileWriter()\n", " pdf_reader = PdfFileReader(old_file)\n", " n = pdf_reader.numPages\n", " pdfWriter.addPage(pdf_reader.getPage(n-1))\n", " split_file = f'{new_path}{name}.pdf'\n", " with open(split_file, 'wb') as pdfOutputFile:\n", " pdfWriter.write(pdfOutputFile)" ] }, { "cell_type": "code", "execution_count": null, "id": "4756d26b-5f4e-4a5c-abcd-a7c179ce5f1e", "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.6" }, "toc-showtags": false }, "nbformat": 4, "nbformat_minor": 5 }