Files
2023-04-26 10:09:26 +00:00

1949 lines
58 KiB
Plaintext
Raw Permalink 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": "4b749231-7ab9-4dcd-8cfd-7b9be485d3c6",
"metadata": {
"tags": [],
"toc-hr-collapsed": true
},
"source": [
"## 低碳院人员信息对应关系及导出"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "1a52629c-52b3-47ee-9796-9db0befc5140",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import os,sys,shutil\n",
"import openpyxl\n",
"import math\n",
"import json\n",
"\n",
"fi_xls = 'data/北京低碳监测.xlsx'\n",
"old = []\n",
"dict1 = {}\n",
"dict2 = {}\n",
"dict3 = {}\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_name = sheet.cell(n,6).value\n",
" m_depart = sheet.cell(n,3).value\n",
" if sheet.cell(n,4).value is not None:\n",
" dict1[int(sheet.cell(n,4).value)] = [m_name,m_depart]\n",
"fi_xls = 'data/低碳院人员邮件信息.xlsx'\n",
"\n",
"wb = openpyxl.load_workbook(fi_xls)\n",
"sheet = wb.active\n",
"for n in range(2,sheet.max_row+1): \n",
" m_dm = sheet.cell(n,3).value\n",
" m_depart = sheet.cell(n,2).value\n",
" m_name = sheet.cell(n,4).value\n",
" m_email = sheet.cell(n,3).value+sheet.cell(n,6).value\n",
"\n",
" if sheet.cell(n,3).value is not None:\n",
" dict2[sheet.cell(n,3).value] = [m_name,m_depart,m_email]\n",
"#print(dict2)\n",
"for item in dict1.keys():\n",
" old.append(item)\n",
"old.sort()\n",
"\n",
"for n in old:\n",
" m_name = dict1[n][0]\n",
" m_depart = dict1[n][1]\n",
" for item in dict2.values():\n",
" if m_name in item and m_depart in item:\n",
" dict3[int(n)] = [m_name,m_depart,item[2]]\n",
" break\n",
"dict3[232] = ['王锐','新能源技术研究中心','20063984@ceic.com']\n",
"dict3[213] = ['王锐','新能源技术研究中心','17240222@ceic.com']\n",
"\n",
"fi_xls = 'data/汇总表.xlsx'\n",
"\n",
"wb = openpyxl.load_workbook(fi_xls)\n",
"sheet = wb.active\n",
"for n in range(2,sheet.max_row+1): \n",
" m_dm = int(sheet.cell(n,1).value)\n",
" m_pn = sheet.cell(n,6).value\n",
" m_xb = sheet.cell(n,3).value\n",
" m_birth = sheet.cell(n,4).value\n",
" if sheet.cell(n,1).value is not None:\n",
" dict3[m_dm].append(m_xb)\n",
" dict3[m_dm].append(m_birth)\n",
" dict3[m_dm].append(m_pn)\n",
"#print(dict2)\n",
"\n",
"with open('data/低碳院人员信息.json','w') as fl2:\n",
" json.dump(dict3,fl2,ensure_ascii=False) "
]
},
{
"cell_type": "markdown",
"id": "2494ff3b-f52f-4933-9879-1b47857d8c67",
"metadata": {
"jp-MarkdownHeadingCollapsed": true,
"tags": []
},
"source": [
"## 低碳院人员体质分组"
]
},
{
"cell_type": "markdown",
"id": "b18747ae-bda7-40bb-af9d-76a987608b81",
"metadata": {},
"source": [
"### 导出至Excel文件"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "a1473ba9-9d8b-4b8a-91a4-d72d680aed8b",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import openpyxl\n",
"import json\n",
"\n",
"dict1 = {}\n",
"fl_name = 'data/低碳院人员信息.json'\n",
"with open(fl_name,'r') as fl:\n",
" m_xx = json.load(fl)\n",
" \n",
"#print(m_xx)\n",
"fi_xls = 'data/适应A组.xlsx'\n",
"wb = openpyxl.load_workbook(fi_xls)\n",
"sheet = wb.active\n",
"for n in range(2,sheet.max_row+1):\n",
" if sheet.cell(n,3).value is not None:\n",
" m_dm = str(sheet.cell(n,1).value)\n",
" m_name = sheet.cell(n,2).value\n",
" m_email = m_xx[m_dm][2]\n",
" m_pn = m_xx[m_dm][3]\n",
" dict1[m_dm.rjust(5,\"0\")] = [m_name,m_email,m_pn]\n",
"m_dm = []\n",
"for item in dict1.keys():\n",
" m_dm.append(item.rjust(5,\"0\"))\n",
"m_dm.sort()\n",
"wb = openpyxl.Workbook()\n",
"sheet = wb.active\n",
"i = 2\n",
"sheet[f'A1'] = '编号'\n",
"sheet[f'B1'] = '姓名'\n",
"sheet[f'C1'] = '邮箱'\n",
"sheet[f'D1'] = '电话'\n",
"for item in m_dm:\n",
" sheet[f'A{i}'] = item\n",
" sheet[f'B{i}'] = dict1[item][0]\n",
" sheet[f'C{i}'] = dict1[item][1]\n",
" sheet[f'D{i}'] = dict1[item][2]\n",
" i+=1\n",
"wb.save('data/A.xlsx') "
]
},
{
"cell_type": "markdown",
"id": "1bb5122f-6100-44b4-9f65-9fac74f69136",
"metadata": {},
"source": [
"### 导出邮件发送人信息"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "9635e141-60f7-4128-baed-d9c31c1fb1b1",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import openpyxl\n",
"import json\n",
"\n",
"dict1 = {}\n",
"fl_name = 'data/低碳院人员信息.json'\n",
"with open(fl_name,'r') as fl:\n",
" m_xx = json.load(fl)\n",
" \n",
"#print(m_xx)\n",
"list1 = []\n",
"fi_xls = 'data/适应A组.xlsx'\n",
"wb = openpyxl.load_workbook(fi_xls)\n",
"sheet = wb.active\n",
"for n in range(2,sheet.max_row+1):\n",
" if sheet.cell(n,3).value is not None:\n",
" m_dm = str(sheet.cell(n,1).value)\n",
" m_name = sheet.cell(n,2).value\n",
" m_email = m_xx[m_dm][2]\n",
" m_pn = m_xx[m_dm][3]\n",
" dict1[m_dm.rjust(5,\"0\")] = [m_name,m_email,m_pn]\n",
"m_dm = []\n",
"for item in dict1.keys():\n",
" m_dm.append(item)\n",
"m_dm.sort()\n",
"for s in m_dm:\n",
" if dict1[s][1]:\n",
" list1.append(dict1[s][1])\n",
"#print(';'.join(list1))\n",
"m_len = len(list1)\n",
"if m_len > 200:\n",
" mail_list1 = []\n",
" mail_list2 = []\n",
" mail_list3 = []\n",
" for i in range(0,100):\n",
" mail_list1.append(list1[i])\n",
" for i in range(100,200):\n",
" mail_list2.append(list1[i])\n",
" for i in range(200,m_len):\n",
" mail_list3.append(list1[i])\n",
" #print(len(mail_list1),len(mail_list2))\n",
" print(';'.join(mail_list1))\n",
" print('\\n')\n",
" print(';'.join(mail_list2))\n",
" print('\\n')\n",
" print(';'.join(mail_list3))\n",
"else:\n",
" mail_list1 = []\n",
" for i in range(0,m_len):\n",
" mail_list1.append(list1[i])\n",
" print(';'.join(mail_list1))"
]
},
{
"cell_type": "markdown",
"id": "ce79e61f-83c4-4425-b27b-e9edf8fb20cd",
"metadata": {},
"source": [
"### 汇总分组导出Excel"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "ad88fd2a-39ce-4a88-bd4a-7699264fd47d",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import openpyxl\n",
"import json\n",
"\n",
"dict1 = {}\n",
"fl_name = 'data/低碳院人员信息.json'\n",
"with open(fl_name,'r') as fl:\n",
" dict1 = json.load(fl)\n",
" \n",
"#print(m_xx)\n",
"list1 = ['适应A组','适应B组','适应C组','提高组']\n",
"for item in list1:\n",
" fi_xls = f'data/{item}.xlsx'\n",
" wb = openpyxl.load_workbook(fi_xls)\n",
" sheet = wb.active\n",
" for n in range(2,sheet.max_row+1):\n",
" if sheet.cell(n,3).value is not None:\n",
" m_dm = str(sheet.cell(n,1).value) \n",
" dict1[m_dm].append(item)\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'] = '邮件'\n",
"sheet['G1'] = '联系电话'\n",
"sheet['H1'] = '组别'\n",
"i = 2 \n",
"for k, v in dict1.items(): \n",
" sheet[f'A{i}'] = k\n",
" sheet[f'B{i}'] = v[0]\n",
" sheet[f'C{i}'] = v[3]\n",
" sheet[f'D{i}'] = v[4]\n",
" sheet[f'E{i}'] = v[1]\n",
" sheet[f'F{i}'] = v[2]\n",
" sheet[f'G{i}'] = v[5]\n",
" sheet[f'H{i}'] = v[6]\n",
" i+= 1\n",
" \n",
"wb.save('data/低碳院人员运动分组表.xlsx') "
]
},
{
"cell_type": "markdown",
"id": "231a0872-34ac-4121-870e-ba398a158576",
"metadata": {
"jp-MarkdownHeadingCollapsed": true,
"tags": []
},
"source": [
"## 合并人员成绩"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "968eacff-74c0-4a2f-aa2a-c29b6da71364",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import openpyxl\n",
"import math\n",
"import json\n",
"\n",
"dict1 = {}\n",
"\n",
" \n",
"#print(m_xx)\n",
"fi_xls = 'data/成绩得分4.xlsx'\n",
"wb = openpyxl.load_workbook(fi_xls)\n",
"sheet = wb.active\n",
"for n in range(2,sheet.max_row+1):\n",
" if sheet.cell(n,1).value is not None:\n",
" m_dm = sheet.cell(n,1).value\n",
" list1 = []\n",
" for i in range(2,28):\n",
" list1.append(sheet.cell(n,i).value)\n",
" dict1[m_dm] = list1\n",
"fi_xls = 'data/成绩得分5.xlsx'\n",
"wb = openpyxl.load_workbook(fi_xls)\n",
"sheet = wb.active\n",
"for n in range(2,sheet.max_row+1):\n",
" if sheet.cell(n,1).value is not None:\n",
" m_dm = sheet.cell(n,1).value\n",
" list1 = []\n",
" for i in range(2,28):\n",
" list1.append(sheet.cell(n,i).value)\n",
" dict1[m_dm] = list1\n",
"#print(dict1)\n",
"wb = openpyxl.Workbook()\n",
"sheet = wb.active\n",
"i = 1\n",
" \n",
"for k, v in dict1.items():\n",
" m_bh = str(k).rjust(5,\"0\")\n",
" list2=['B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','AA']\n",
" sheet[f'A{i}'] = k\n",
" for ii in range(0,26): \n",
" sheet[f'{list2[ii]}{i}'] = v[ii]\n",
" ii+= 1\n",
" i+= 1\n",
" \n",
"wb.save('data/合并.xlsx') \n",
" \n"
]
},
{
"cell_type": "markdown",
"id": "0bef4bd3-99e8-4a2d-a418-77f832b1254a",
"metadata": {
"jp-MarkdownHeadingCollapsed": true,
"tags": []
},
"source": [
"## 导出人员信息表"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "c0dac48c-490a-4632-8bdc-46c09adb9de8",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import openpyxl\n",
"import math\n",
"import json\n",
" \n",
"dict1 = {}\n",
"fl_name = 'data/低碳院人员信息.json'\n",
"with open(fl_name,'r') as fl:\n",
" m_xx = json.load(fl)\n",
" \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'] = '邮件'\n",
"sheet['G1'] = '联系电话'\n",
"i = 2 \n",
"for k, v in m_xx.items():\n",
" m_bh = str(k).rjust(5,\"0\")\n",
" sheet[f'A{i}'] = k\n",
" sheet[f'B{i}'] = v[0]\n",
" sheet[f'C{i}'] = v[3]\n",
" sheet[f'D{i}'] = v[4]\n",
" sheet[f'E{i}'] = v[1]\n",
" sheet[f'F{i}'] = v[2]\n",
" sheet[f'G{i}'] = v[5]\n",
" i+= 1\n",
" \n",
"wb.save('data/低碳院人员信息表.xlsx') "
]
},
{
"cell_type": "markdown",
"id": "b1462a26-59f8-4e5f-8fb9-d927059e0747",
"metadata": {
"jp-MarkdownHeadingCollapsed": true,
"tags": []
},
"source": [
"## 获取第一次报告人员情况"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "a09d16d7-62a8-4628-9df3-4658a78a9a14",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
" \n",
"dict1 = {}\n",
"fl_name = 'data/低碳院报告.json'\n",
"with open(fl_name,'r') as fl:\n",
" m_xx = json.load(fl)\n",
"print(len(m_xx.keys()))"
]
},
{
"cell_type": "markdown",
"id": "bb3448ff-a8d3-417d-ab3a-4b54e28aaca0",
"metadata": {
"tags": []
},
"source": [
"## 2023年体测情况"
]
},
{
"cell_type": "markdown",
"id": "d7ad01ef-93c3-4735-b609-bb5d38f85a25",
"metadata": {},
"source": [
"### 导入最新人员手机信息"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "dfa3f093-25a7-4a8d-b4d6-22e0f6fcbb92",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import openpyxl\n",
"import math\n",
"import json\n",
"import pymysql\n",
"\n",
"\n",
"fi_xls = 'data/低碳院多点账号20230217.xlsx'\n",
"chongming = ['王锐','王楠','郭强','王涛','张静']\n",
"dict1 = {}\n",
"dict2 = {}\n",
"dict3 = {}\n",
"\n",
"db = pymysql.connect(host = \"localhost\",user = \"songyi\",password = \"yylzs\",database = \"ydyb\" )\n",
"cursor = db.cursor()\n",
"sql = \"SELECT a.name ,a.phone,b.avatar_id FROM people as a,places_people as b WHERE a.id =b.people_id AND b.place_id = 139\"\n",
"cursor.execute(sql)\n",
"results = cursor.fetchall()\n",
"for result in results:\n",
" if result[0] not in chongming:\n",
" dict2[result[0]] = [str(result[1]).strip(),result[2]]\n",
"#print(dict2)\n",
"\n",
"wb = openpyxl.load_workbook(fi_xls)\n",
"sheet = wb.active\n",
"for n in range(2,sheet.max_row+1):\n",
" if sheet.cell(n,2).value is not None:\n",
" dict1[int(sheet.cell(n,1).value)] = [sheet.cell(n,2).value,sheet.cell(n,3).value,str(sheet.cell(n,4).value).strip()]\n",
"#print(dict1)\n",
"i = 1\n",
"for k, v in dict1.items():\n",
" if v[0] in dict2.keys() and v[2]!=dict2[v[0]][0]:\n",
" print(i,v[0],v[2],dict2[v[0]][1])\n",
" i+= 1"
]
},
{
"cell_type": "markdown",
"id": "f1d79414-577e-4bfa-b3db-1c9ac3168f76",
"metadata": {},
"source": [
"### 获取人员统计信息"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "916e4437-d28a-4d41-ab87-9470c6b7116d",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"import pymysql\n",
"import datetime\n",
"\n",
"dict1 = {}\n",
"dict2 = {}\n",
"dict3 = {}\n",
"\n",
"db = pymysql.connect(host = \"localhost\",user = \"songyi\",password = \"yylzs\",database = \"ydyb\" )\n",
"cursor = db.cursor()\n",
"sql = \"SELECT b.avatar_id, a.name ,a.sex,a.birth FROM people as a,places_people as b WHERE a.id =b.people_id AND b.place_id = 139\"\n",
"cursor.execute(sql)\n",
"results = cursor.fetchall()\n",
"for result in results:\n",
" bh = result[0]\n",
" \n",
" name = str(result[1]).strip()\n",
" dict2.setdefault(bh,{})\n",
" dict2[bh]['name'] = name\n",
" dict2[bh]['sex'] = result[2]\n",
" #dict2[bh]['birth'] = result[3]\n",
" #print(result[3])\n",
" days = (datetime.date(2023, 3, 6)-result[3]).days\n",
" dict2[bh]['age'] = round(days/365)\n",
"\n",
"filename = 'data/低碳院体测人员信息2023.json'\n",
"with open(filename, 'w') as fl:\n",
" json.dump(dict2, fl, ensure_ascii=False)\n",
"print('ok')"
]
},
{
"cell_type": "markdown",
"id": "e659cc7e-080a-4ad6-9306-3cfff0aca134",
"metadata": {},
"source": [
"### 获取人员测试成绩"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "3e6b4c99-fa09-414d-9dd5-932835d8609c",
"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/139.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": "36085f28-fad2-490e-b085-2ef5dd5d64c8",
"metadata": {},
"source": [
"### 统计人员测试成绩"
]
},
{
"cell_type": "markdown",
"id": "9e0f798b-665f-4ffb-a18c-fc8f87f21ade",
"metadata": {},
"source": [
"#### 汇总人员信息及成绩"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "18b7ab77-8fc3-4edf-93c4-9a1e29cd71f6",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"\n",
"\n",
"items = ['体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']\n",
"filename = 'data/result_低碳院.json'\n",
"\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",
"for k,v in dict1.items():\n",
" print(k)\n",
" score = 0\n",
" i = 0\n",
" for k1,v1 in v.items():\n",
" \n",
" \n",
" if k1 in items:\n",
" score = score + int(v1['得分'])\n",
" i+=1\n",
" \n",
" dict1[k]['age'] = dict2[k]['age']\n",
" dict1[k]['sex'] = dict2[k]['sex']\n",
" dict1[k]['score'] = round(score/i,2)\n",
" \n",
"filename = 'data/result_低碳院.json'\n",
"with open(filename,'w') as fl:\n",
" json.dump(dict1, fl) \n",
"print('ok')"
]
},
{
"cell_type": "markdown",
"id": "270af334-51d0-4c79-8639-e64fb4bb292a",
"metadata": {},
"source": [
"### 报告分组更名"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "f0860f3a-9f63-43c9-aa39-3ee5ad8116e3",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import os,sys,shutil\n",
"import json\n",
"import math\n",
"import openpyxl\n",
"\n",
"filename = 'data/低碳院体测人员信息2023.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl)\n",
"\n",
"fi_path = 'file/139/2023-03-08'\n",
"m_path = 'file/139/new'\n",
"old = []\n",
"\n",
"fl=os.listdir(fi_path)\n",
"for fn in fl:\n",
" if os.path.isfile(fi_path + '/' + fn):\n",
" ofn = int(fn.split('.')[0])\n",
" old.append(ofn) \n",
"old.sort()\n",
"for n in old: \n",
" o_name = f'{fi_path}/{n}.pdf'\n",
" name = dict1[str(n)]['name']\n",
" n_name = f'{m_path}/{str(n).rjust(5,\"0\")}-{name}.pdf'\n",
" #print(o_name,n_name)\n",
" if not os.path.exists(n_name):\n",
" shutil.copyfile(o_name,n_name)\n",
" print(n_name)\n",
"\n"
]
},
{
"cell_type": "markdown",
"id": "8c97bf0f-2b01-487d-bd18-200fcbe2c9b3",
"metadata": {},
"source": [
"#### 根据年龄汇总人员信息及成绩"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "bcc60f36-71aa-4d59-b4dd-55b1f95ef4f3",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"\n",
"\n",
"nld = [[20,24],[25,29],[30,34],[35,39],[40,44],[45,49],[50,54],[55,59],[60,69]]\n",
"filename = 'data/result_低碳院.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl) \n",
"for item in nld:\n",
" di = item[0]\n",
" gao = item[1]\n",
" i = 1\n",
" score = 0\n",
" for k,v in dict1.items():\n",
" if v['age'] in range(di,gao+1):\n",
" score = score+v['score']\n",
" i+=1\n",
" print(f'{di}~{gao}岁平均成绩:{round(score/i,2)}分,人数:{i-1}人')\n",
"\n"
]
},
{
"cell_type": "markdown",
"id": "f0d65f4e-04e8-4680-9b30-77b045be4e0a",
"metadata": {},
"source": [
"#### 根据项目汇总人员信息及成绩"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "f0624326-7a21-4358-a036-daf03432bc80",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"import openpyxl\n",
"\n",
"items = ['体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']\n",
"filename = 'data/result_低碳院.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl) \n",
"dict2 = {}\n",
"for item in items:\n",
" dict2.setdefault(item,{})\n",
" for k, v in dict1.items():\n",
" if item in v.keys():\n",
" dict2[item].setdefault('总体',[0,0])\n",
" \n",
" if v['sex']==0:\n",
" sex = '男'\n",
" else:\n",
" sex = '女'\n",
" dict2[item].setdefault(sex,[0,0])\n",
" dict2[item]['总体'][0]= dict2[item]['总体'][0]+int(v[item]['得分'])\n",
" dict2[item]['总体'][1]= dict2[item]['总体'][1]+1\n",
" dict2[item][sex][0] = dict2[item][sex][0]+int(v[item]['得分'])\n",
" dict2[item][sex][1] = dict2[item][sex][1]+1\n",
"print(dict2)\n",
"title= []\n",
"zt= []\n",
"nan= []\n",
"nv = []\n",
"title.append('')\n",
"zt.append('总体')\n",
"nan.append('男性')\n",
"nv.append('女性')\n",
"for k, v in dict2.items():\n",
" title.append(k)\n",
" zt.append(round(v['总体'][0]/v['总体'][1],2))\n",
" if '男' in v.keys():\n",
" nan.append(round(v['男'][0]/v['男'][1],2))\n",
" else:\n",
" nan.append(' ')\n",
" if '女' in v.keys():\n",
" nv.append(round(v['女'][0]/v['女'][1],2))\n",
" else:\n",
" nv.append(' ')\n",
"list1 = []\n",
"\n",
"list1.append(zt)\n",
"list1.append(nan)\n",
"list1.append(nv)\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",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n"
]
},
{
"cell_type": "markdown",
"id": "c27c6f4b-d0ed-40e8-aed9-09662edd21c6",
"metadata": {
"jp-MarkdownHeadingCollapsed": true,
"tags": []
},
"source": [
"### 统计问卷人员信息"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "8ccee97e-60e0-4363-b706-d4a71f214142",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"import pymysql\n",
"import openpyxl\n",
"\n",
"\n",
"dict1 = {}\n",
"dict2 = {}\n",
"dict3 = {}\n",
"list1 = []\n",
"fi_xls = 'data/低碳院多点账号20230217.xlsx'\n",
"wb = openpyxl.load_workbook(fi_xls)\n",
"sheet = wb.active\n",
"for n in range(2,sheet.max_row+1):\n",
" if sheet.cell(n,2).value is not None:\n",
" list1.append(str(sheet.cell(n,4).value).strip())\n",
"#print(list1)\n",
"list2 = []\n",
"list3 = []\n",
"\n",
"\n",
"db = pymysql.connect(host = \"localhost\",user = \"songyi\",password = \"yylzs\",database = \"ydyb\" )\n",
"cursor = db.cursor()\n",
"sql = \"select * FROM Survey s WHERE s.surveyId IN ('psy6') AND s.updatedAt >'2022-11-01'\"\n",
"cursor.execute(sql)\n",
"results = cursor.fetchall()\n",
"for result in results: \n",
" #dict2[result[0]] = [str(result[2]).strip(),result[1]]\n",
" dict2[result[0]] = str(result[2]).strip()\n",
"#print(dict2)\n",
"for k, v in dict2.items():\n",
" if v not in list1:\n",
" list2.append(v)\n",
"sql = \"SELECT a.phone FROM people as a,places_people as b WHERE a.id =b.people_id AND b.place_id = 139\"\n",
"cursor.execute(sql)\n",
"results = cursor.fetchall()\n",
"for result in results:\n",
" list3.append(result[0])\n",
"#print(dict2)\n",
"for item in list2:\n",
" if item not in list3:\n",
" print(item)\n"
]
},
{
"cell_type": "markdown",
"id": "9ba6ea9a-28f5-43c7-9dd7-74a626838303",
"metadata": {
"jp-MarkdownHeadingCollapsed": true,
"tags": []
},
"source": [
"### 统计2022年问卷人员信息"
]
},
{
"cell_type": "markdown",
"id": "1ddcc50e-f6b5-4fcc-8bb4-64ebb1d6f9e3",
"metadata": {},
"source": [
"#### 统计2022年问卷人员总信息"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "2339b885-e885-499a-a078-5a2a1fb818bd",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"import pymysql\n",
"import openpyxl\n",
"\n",
"\n",
"dict1 = {}\n",
"dict2 = {}\n",
"dict3 = {}\n",
"list1 = []\n",
"fi_xls = 'data/低碳院多点账号20230217.xlsx'\n",
"wb = openpyxl.load_workbook(fi_xls)\n",
"sheet = wb.active\n",
"for n in range(2,sheet.max_row+1):\n",
" if sheet.cell(n,2).value is not None:\n",
" list1.append(str(sheet.cell(n,4).value).strip())\n",
"#print(list1)\n",
"list2 = []\n",
"list3 = []\n",
"\n",
"\n",
"db = pymysql.connect(host = \"localhost\",user = \"songyi\",password = \"yylzs\",database = \"ydyb\" )\n",
"cursor = db.cursor()\n",
"sql = \"select * FROM Survey s WHERE s.surveyId IN ('psy4','tcmv2') AND s.updatedAt >'2022-11-01'\"\n",
"cursor.execute(sql)\n",
"results = cursor.fetchall()\n",
"for result in results: \n",
" #dict2[result[0]] = [str(result[2]).strip(),result[1]]\n",
" dict2[result[0]] = str(result[2]).strip()\n",
"#print(dict2)\n",
"for k, v in dict2.items():\n",
" if v not in list1:\n",
" list2.append(v)\n",
"sql = \"SELECT a.phone FROM people as a,places_people as b WHERE a.id =b.people_id AND b.place_id = 139\"\n",
"cursor.execute(sql)\n",
"results = cursor.fetchall()\n",
"for result in results:\n",
" list3.append(result[0])\n",
"#print(dict2)\n",
"for item in list2:\n",
" if item not in list3:\n",
" print(item)\n"
]
},
{
"cell_type": "markdown",
"id": "fc57ad21-a1d1-4728-8997-016fd72cbdc8",
"metadata": {},
"source": [
"#### 核验人员手机号码重复"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "69300248-e60f-4086-9eb9-2a61e91b5957",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"import pymysql\n",
"import openpyxl\n",
"\n",
"\n",
"dict1 = {}\n",
"dict2 = {}\n",
"dict3 = {}\n",
"list1 = []\n",
"fi_xls = 'data/低碳院人员信息表.xlsx'\n",
"wb = openpyxl.load_workbook(fi_xls)\n",
"sheet = wb.active\n",
"for n in range(2,sheet.max_row+1):\n",
" if sheet.cell(n,2).value is not None:\n",
" pn = str(sheet.cell(n,7).value).strip()\n",
" if pn not in list1:\n",
" list1.append(pn)\n",
" else:\n",
" print(pn)\n",
" "
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "9d5cbdcf-7f46-4a51-a695-258eb0273d2a",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"import pymysql\n",
"import openpyxl\n",
"\n",
"\n",
"dict1 = {}\n",
"dict2 = {}\n",
"dict3 = {}\n",
"list1 = []\n",
"sql = \"SELECT a.phone,a.name,c.unit FROM people as a,places_people as b,_ditan2 as c WHERE a.id =b.people_id AND c.id = b.avatar_id and b.place_id = 139\"\n",
"cursor.execute(sql)\n",
"results = cursor.fetchall()\n",
"for result in results:\n",
" if result[0] not in list1:\n",
" list1.append(result[0])\n",
" else:\n",
" print(result[0])\n",
"print(list1)"
]
},
{
"cell_type": "markdown",
"id": "1afcf98f-1965-46a9-b549-5dbabcb9a440",
"metadata": {},
"source": [
"#### 统计2022年心理问卷人员"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "ca716a71-d866-413c-bf66-204003cc019a",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"import pymysql\n",
"import openpyxl\n",
"\n",
"\n",
"dict1 = {}\n",
"dict2 = {}\n",
"dict3 = {}\n",
"list1 = []\n",
"sql = \"SELECT a.phone,a.name,c.unit FROM people as a,places_people as b,_ditan2 as c WHERE a.id =b.people_id AND c.id = b.avatar_id and b.place_id = 139\"\n",
"cursor.execute(sql)\n",
"results = cursor.fetchall()\n",
"\n",
"for result in results:\n",
" if result[0] != None:\n",
" dict1[result[0]] = [result[1],result[2]]\n",
"#print(dict1)\n",
"\n",
"sql = \"select * FROM Survey s WHERE s.surveyId IN ('psy4','tcmv2') AND s.updatedAt >'2022-11-01'\"\n",
"cursor.execute(sql)\n",
"results = cursor.fetchall()\n",
"for result in results: \n",
" #dict2[result[0]] = [str(result[2]).strip(),result[6]]\n",
" pn = str(result[2]).strip()\n",
" if pn in dict1.keys():\n",
" dict2.setdefault(pn,{})\n",
" dict2[pn].setdefault('item',[])\n",
" dict2[pn]['name'] = dict1[pn][0]\n",
" dict2[pn]['unit'] = dict1[pn][1]\n",
" dict2[pn]['item'].append(result[1])\n",
"#print(dict2)\n",
"for k, v in dict2.items():\n",
" list2 = []\n",
" ph = k\n",
" item = ','.join(v['item'])\n",
" name = v['name']\n",
" unit = v['unit']\n",
" list2 = [name,unit,ph,item]\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",
" "
]
},
{
"cell_type": "markdown",
"id": "d3c7b93b-d132-4de4-a4f1-687b36d06b6d",
"metadata": {
"jp-MarkdownHeadingCollapsed": true,
"tags": []
},
"source": [
"### 统计2023年体测人员邮箱信息"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "366a9875-3489-48fd-ba73-f19e106696a2",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import openpyxl\n",
"import math\n",
"import json\n",
"import pymysql\n",
"\n",
"fi_xls = 'data/低碳院人员信息表.xlsx'\n",
"chongming = ['王锐','王楠','郭强','王涛','张静']\n",
"dict1 = {}\n",
"dict2 = {}\n",
"dict3 = {}\n",
"\n",
"db = pymysql.connect(host = \"localhost\",user = \"songyi\",password = \"yylzs\",database = \"ydyb\" )\n",
"cursor = db.cursor()\n",
"sql = \"SELECT a.name ,a.phone,b.avatar_id FROM people as a,places_people as b WHERE a.id =b.people_id AND b.place_id = 139\"\n",
"cursor.execute(sql)\n",
"results = cursor.fetchall()\n",
"for result in results:\n",
" if result[0] not in chongming:\n",
" dict2[result[0]] = [str(result[1]).strip(),result[2]]\n",
"#print(dict2)\n",
"wb = openpyxl.load_workbook(fi_xls)\n",
"sheet = wb.active\n",
"for n in range(2,sheet.max_row+1):\n",
" if sheet.cell(n,2).value is not None:\n",
" email = str(sheet.cell(n,6).value).strip()\n",
" name = str(sheet.cell(n,2).value).strip()\n",
" if name in dict2.keys():\n",
" bh = dict2[name][1]\n",
" dict1.setdefault(bh,{})\n",
" dict1[bh]['name'] = name\n",
" dict1[bh]['phone'] = dict2[name][0]\n",
" dict1[bh]['email'] = email\n",
"print(dict1)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "a679a299-e338-42d3-b54e-443e834def72",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import openpyxl\n",
"import math\n",
"import json\n",
"import pymysql\n",
"\n",
"fi_xls = 'data/低碳院人员信息表.xlsx'\n",
"chongming = ['王锐','王楠','郭强','王涛','张静']\n",
"dict1 = {}\n",
"dict2 = {}\n",
"dict3 = {}\n",
"\n",
"db = pymysql.connect(host = \"localhost\",user = \"songyi\",password = \"yylzs\",database = \"ydyb\" )\n",
"cursor = db.cursor()\n",
"sql = \"SELECT a.name ,a.phone,b.avatar_id FROM people as a,places_people as b WHERE a.id =b.people_id AND b.place_id = 139\"\n",
"cursor.execute(sql)\n",
"results = cursor.fetchall()\n",
"for result in results:\n",
" bh = result[2]\n",
" dict2.setdefault(bh,{})\n",
"\n",
" dict2[bh]['name'] = str(result[0]).strip()\n",
" if result[1] is not None:\n",
" dict2[bh]['phone'] = str(result[1]).strip()\n",
"#print(dict2)\n",
"wb = openpyxl.load_workbook(fi_xls)\n",
"sheet = wb.active\n",
"for n in range(2,sheet.max_row+1):\n",
" if sheet.cell(n,2).value not in chongming:\n",
" email = str(sheet.cell(n,6).value).strip()\n",
" name = str(sheet.cell(n,2).value).strip()\n",
" dict1[name] = email\n",
"for k, v in dict2.items():\n",
" if v['name'] in dict1.keys():\n",
" dict2[k]['email'] = dict1[v['name']]\n",
"#for k, v in dict2.items():\n",
"# if 'email' not in v.keys():\n",
"# print(k,v['name'])\n",
"for n in range(2,sheet.max_row+1):\n",
" email = str(sheet.cell(n,6).value).strip()\n",
" name = str(sheet.cell(n,2).value).strip()\n",
" pn = str(sheet.cell(n,7).value).strip()\n",
" dict3.setdefault(pn,{})\n",
" dict3[pn]['email'] = email\n",
" dict3[pn]['name'] = name\n",
"\n",
"for k, v in dict2.items():\n",
" if 'phone' in v.keys() and v['phone'] in dict3.keys() and v['name'] == dict3[v['phone']]['name']:\n",
" dict2[k]['email'] = dict3[v['phone']]['email']\n",
"\n",
"#for k, v in dict2.items():\n",
"# if 'email' not in v.keys():\n",
"# print(k,v['name'],v['phone'])\n",
"dict2[465]['email'] = '17240051@@ceic.com'\n",
"filename = 'data/低碳院邮件信息.json'\n",
"with open(filename, 'w') as fl:\n",
" json.dump(dict2, fl, ensure_ascii=False)\n",
"print('ok')"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "46e58c6c-de99-4ec9-8bd7-c7e39ba815d5",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"fl_name = 'data/低碳院邮件信息.json'\n",
"with open(fl_name,'r') as fl:\n",
" dict2 = json.load(fl)\n",
"dict2['465']['email'] = '20024422@ceic.com'\n",
"filename = 'data/低碳院邮件信息.json'\n",
"with open(filename, 'w') as fl:\n",
" json.dump(dict2, fl, ensure_ascii=False)\n",
"print('ok')"
]
},
{
"cell_type": "markdown",
"id": "6350fa35-d539-4719-bc0d-c80db500cc4b",
"metadata": {},
"source": [
"### 导出2023年人员信息"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "2ddc6339-e5c6-4e56-a4d3-885ce7974aec",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"import pymysql\n",
"\n",
"chongming = ['王锐','王楠','郭强','王涛','张静']\n",
"dict1 = {}\n",
"dict2 = {}\n",
"dict3 = {}\n",
"fl_name = 'data/低碳院邮件信息.json'\n",
"with open(fl_name,'r') as fl:\n",
" dict1 = json.load(fl)\n",
"for k, v in dict1.items():\n",
" if v['name'] not in chongming and 'email' in v.keys():\n",
" dict3[v['name']] = {'phone':v['phone'],'email':v['email']}\n",
"db = pymysql.connect(host = \"localhost\",user = \"songyi\",password = \"yylzs\",database = \"ydyb\" )\n",
"cursor = db.cursor()\n",
"sql = \"SELECT a.name ,a.phone,b.avatar_id FROM people as a,places_people as b WHERE a.id =b.people_id AND b.place_id = 139\"\n",
"cursor.execute(sql)\n",
"results = cursor.fetchall()\n",
"for result in results:\n",
" bh = result[2]\n",
" \n",
" name = str(result[0]).strip()\n",
"\n",
" dict2.setdefault(bh,{})\n",
" dict2[bh]['name'] = name\n",
" if name in dict3.keys():\n",
" \n",
" dict2[bh]['email'] = dict3[name]['email']\n",
" if result[1] is not None:\n",
" dict2[bh]['phone'] = str(result[1]).strip()\n",
"dict2[465]['email'] = '17240051@@ceic.com'\n",
"filename = 'data/低碳院人员信息2023.json'\n",
"with open(filename, 'w') as fl:\n",
" json.dump(dict2, fl, ensure_ascii=False)\n",
"print('ok')"
]
},
{
"cell_type": "markdown",
"id": "646d095f-1669-4bc2-885e-c203d0347e72",
"metadata": {
"execution": {
"iopub.execute_input": "2023-03-21T12:04:00.443790Z",
"iopub.status.busy": "2023-03-21T12:04:00.442938Z",
"iopub.status.idle": "2023-03-21T12:04:00.448277Z",
"shell.execute_reply": "2023-03-21T12:04:00.447030Z",
"shell.execute_reply.started": "2023-03-21T12:04:00.443751Z"
},
"tags": []
},
"source": [
"### 统计2023年体测报告人员邮件信息"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "31a10956-3b8d-4b5e-895a-2a1da783b4fe",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"import glob\n",
"import os\n",
"\n",
"filename = 'data/低碳院邮件信息.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl)\n",
"dict2 = {}\n",
"fls = glob.glob('file/139/2023-03-08/*.pdf')\n",
"for fi in fls:\n",
" bh = os.path.basename(fi).split('.')[0]\n",
" if bh in dict1.keys() and 'email' in dict1[bh].keys():\n",
" #print(bh,dict1[bh]['name'],dict1[bh]['email'])\n",
" #print(bh,dict1[bh]['name'])\n",
" dict2.setdefault(bh,{})\n",
" dict2[bh]['name'] = dict1[bh]['name']\n",
" dict2[bh]['email'] = dict1[bh]['email']\n",
" dict2[bh]['file'] = fi\n",
"#print(len(dict2))\n",
"filename = 'data/低碳院邮件列表.json'\n",
"with open(filename, 'w') as fl:\n",
" json.dump(dict2, fl, ensure_ascii=False)\n",
"print('ok')"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "f04de52b-e1ad-4bdf-8cee-7e99fafcff6c",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"import glob\n",
"import os\n",
"\n",
"filename = 'data/低碳院邮件信息.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl)\n",
"print(dict1)"
]
},
{
"cell_type": "markdown",
"id": "fea20fa1-4cd3-4528-a7d1-dbce05e34fe4",
"metadata": {},
"source": [
"### 根据字典生成邮件列表"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "2310dda9-01cb-43a0-a1db-36f37deb35a4",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"import glob\n",
"import os\n",
"\n",
"dict1 = {\n",
" '494': {'name': '王永涛', 'email': '20087867@ceic.com'}, \n",
" '497': {'name': '王婧', 'email': '20084082@chnenergy.com.cn'}, \n",
" '499': {'name': '孙华宇', 'email': '20086856@chnenergy.com.cn'}, \n",
" '500': {'name': '贾建慧', 'email': '20084081@chnenergy.com.cn'}, \n",
" '501': {'name': '郝国政', 'email': '20084079@chnenergy.com.cn'}, \n",
" '502': {'name': '崔双双', 'email': '20084083@chnenergy.com.cn'}, \n",
" '503': {'name': '赵振慧', 'email': '11234518@chnenergy.com.cn'}, \n",
" '504': {'name': '刘静远', 'email': '20084080@chnenergy.com.cn'}, \n",
" '505': {'name': '陆斌', 'email': '20087351@ceic.com'}, \n",
" '506': {'name': '杜鹏', 'email': '12080316@chnenergy.com.cn'}, \n",
" '507': {'name': '赵亮亮', 'email': '20086857@chnenergy.com.cn'}, \n",
" '508': {'name': '张文秀', 'email': 'zhangwenxiu@nicenergy.com'}\n",
"}\n",
"dict2 = {}\n",
"fls = glob.glob('file/139/2022-12-31/*.pdf')\n",
"for fi in fls:\n",
" bh = os.path.basename(fi).split('.')[0]\n",
" if bh in dict1.keys() and 'email' in dict1[bh].keys():\n",
" #print(bh,dict1[bh]['name'],dict1[bh]['email'])\n",
" #print(bh,dict1[bh]['name'])\n",
" dict2.setdefault(bh,{})\n",
" dict2[bh]['name'] = dict1[bh]['name']\n",
" dict2[bh]['email'] = dict1[bh]['email']\n",
" dict2[bh]['file'] = fi\n",
"#print(len(dict2))\n",
"filename = 'data/低碳院邮件列表(新增).json'\n",
"with open(filename, 'w') as fl:\n",
" json.dump(dict2, fl, ensure_ascii=False)\n",
"print('ok')"
]
},
{
"cell_type": "markdown",
"id": "45c9cd7b-db12-4f60-b550-f9f3f550ba93",
"metadata": {
"execution": {
"iopub.execute_input": "2023-03-21T13:40:39.830416Z",
"iopub.status.busy": "2023-03-21T13:40:39.829533Z",
"iopub.status.idle": "2023-03-21T13:40:39.834469Z",
"shell.execute_reply": "2023-03-21T13:40:39.833400Z",
"shell.execute_reply.started": "2023-03-21T13:40:39.830377Z"
},
"tags": []
},
"source": [
"### 群发邮件"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "7773fb0a-6644-4c8e-8424-24ebb9f04844",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"from email.mime.text import MIMEText\n",
"from email.mime.multipart import MIMEMultipart\n",
"from email.mime.application import MIMEApplication\n",
"from email.header import Header\n",
"import smtplib\n",
"import requests\n",
"import time\n",
"import re\n",
"import json\n",
" \n",
"\n",
"filename = 'data/低碳院邮件列表(新增).json'\n",
"\n",
"with open(filename,'r') as fl:\n",
" m_xx = json.load(fl)\n",
"for k, v in m_xx.items():\n",
" m_bh = str(k).rjust(5,\"0\")\n",
" fl_name = v['file']\n",
" fl = f\"{m_bh}-{v['name']}.pdf\"\n",
" m_rec = v['email']\n",
" \n",
" from_addr = 'kmingedu@163.com' #发件邮箱\n",
" password = 'GKWUZXMVYKSSUSSL' #邮箱密码\n",
" smtp_server = 'smtp.163.com' #SMTP服务器,以新浪为例\n",
" server = smtplib.SMTP(smtp_server,25) #第二个参数为默认端口为25,有些邮件有特殊端口\n",
" msg = MIMEMultipart()\n",
" msg['Subject'] = Header(\"低碳清洁能源研究院体质监测报告(2023年3月)\",'utf-8')\n",
" msg['From'] = Header('北京坤铭体质监测评估中心')\n",
" msg['To'] = Header(m_rec)\n",
"\n",
" from_addr = 'kmingedu@163.com' #发件邮箱\n",
" password = 'GKWUZXMVYKSSUSSL' #邮箱密码\n",
" to_addr = m_rec #收件邮箱\n",
" att1 =MIMEApplication(open(fl_name, 'rb').read())\n",
" #att1[\"Content-Type\"] = 'application/octet-stream'\n",
" # 这里的filename可以任意写,写什么名字,邮件中显示什么名字\n",
" att1.add_header('Content-Disposition','attachment',filename=fl)\n",
" msg.attach(att1)\n",
" try:\n",
" server.login(from_addr,password) #登录邮箱\n",
" server.sendmail(from_addr,to_addr,msg.as_string()) #将msg转化成string发出\n",
" server.quit\n",
" time.sleep(3)\n",
" print(f'{fl}邮件发送成功!')\n",
" except smtplib.SMTPException:\n",
" print (\"Error: 无法发送邮件\")\n",
" \n"
]
},
{
"cell_type": "markdown",
"id": "39575670-4a54-4374-8c26-4523b5782c78",
"metadata": {},
"source": [
"### 统计2022年12月体测报告人员邮件信息"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "ec395435-7596-4de8-9f41-f45c0c744c3d",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"import glob\n",
"import os\n",
"\n",
"filename = 'data/低碳院邮件信息.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl)\n",
"dict2 = {}\n",
"fls = glob.glob('file/139/2022-12-31/*.pdf')\n",
"for fi in fls:\n",
" bh = os.path.basename(fi).split('.')[0]\n",
" if bh in dict1.keys() and 'email' in dict1[bh].keys():\n",
" #print(bh,dict1[bh]['name'],dict1[bh]['email'])\n",
" #print(bh,dict1[bh]['name'])\n",
" dict2.setdefault(bh,{})\n",
" dict2[bh]['name'] = dict1[bh]['name']\n",
" dict2[bh]['email'] = dict1[bh]['email']\n",
" dict2[bh]['file'] = fi\n",
"#print(len(dict2))\n",
"filename = 'data/低碳院邮件列表202212.json'\n",
"with open(filename, 'w') as fl:\n",
" json.dump(dict2, fl, ensure_ascii=False)\n",
"print('ok')"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "977e29b0-2b3f-4941-b33a-0b3b5ac4aced",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"import glob\n",
"import os\n",
"\n",
"filename = 'data/低碳院邮件信息.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl)\n",
"dict2 = {}\n",
"fls = glob.glob('file/139/2022-12-31/*.pdf')\n",
"for fi in fls:\n",
" bh = os.path.basename(fi).split('.')[0]\n",
" if bh in dict1.keys() and 'email' not in dict1[bh].keys():\n",
" #print(bh,dict1[bh]['name'],dict1[bh]['email'])\n",
" print(bh,dict1[bh]['name'])\n",
" "
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "e8d5cc48-a23d-44d9-9130-6902452d5d18",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"from email.mime.text import MIMEText\n",
"from email.mime.multipart import MIMEMultipart\n",
"from email.mime.application import MIMEApplication\n",
"from email.header import Header\n",
"import smtplib\n",
"import requests\n",
"import time\n",
"import re\n",
"import json\n",
" \n",
"\n",
"filename = 'data/低碳院邮件列表(新增).json'\n",
"\n",
"with open(filename,'r') as fl:\n",
" m_xx = json.load(fl)\n",
"for k, v in m_xx.items():\n",
" m_bh = str(k).rjust(5,\"0\")\n",
" fl_name = v['file']\n",
" fl = f\"{m_bh}-{v['name']}.pdf\"\n",
" m_rec = v['email']\n",
" \n",
" from_addr = 'kmingedu@163.com' #发件邮箱\n",
" password = 'GKWUZXMVYKSSUSSL' #邮箱密码\n",
" smtp_server = 'smtp.163.com' #SMTP服务器,以新浪为例\n",
" server = smtplib.SMTP(smtp_server,25) #第二个参数为默认端口为25,有些邮件有特殊端口\n",
" msg = MIMEMultipart()\n",
" msg['Subject'] = Header(\"低碳清洁能源研究院体质监测报告(2022年12月)\",'utf-8')\n",
" msg['From'] = Header('北京坤铭体质监测评估中心')\n",
" msg['To'] = Header(m_rec)\n",
"\n",
" from_addr = 'kmingedu@163.com' #发件邮箱\n",
" password = 'GKWUZXMVYKSSUSSL' #邮箱密码\n",
" to_addr = m_rec #收件邮箱\n",
" att1 =MIMEApplication(open(fl_name, 'rb').read())\n",
" #att1[\"Content-Type\"] = 'application/octet-stream'\n",
" # 这里的filename可以任意写,写什么名字,邮件中显示什么名字\n",
" att1.add_header('Content-Disposition','attachment',filename=fl)\n",
" msg.attach(att1)\n",
" try:\n",
" server.login(from_addr,password) #登录邮箱\n",
" server.sendmail(from_addr,to_addr,msg.as_string()) #将msg转化成string发出\n",
" server.quit\n",
" time.sleep(3)\n",
" print(f'{fl}邮件发送成功!')\n",
" except smtplib.SMTPException:\n",
" print (\"Error: 无法发送邮件\")\n",
" "
]
},
{
"cell_type": "markdown",
"id": "b4cb8b9c-f9ad-4a80-a5d6-dff5edb40e79",
"metadata": {},
"source": [
"## 百日筑基分析"
]
},
{
"cell_type": "markdown",
"id": "aa0e3dc6-053b-44a8-bbaa-7ec2a7790059",
"metadata": {},
"source": [
"### 导入人员信息"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "1eb6ebd0-c78c-4f6d-b3fd-a27e240d216c",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import openpyxl\n",
"import json\n",
"\n",
"fi_xls = 'data/低碳院小鹅通人员情况表.xlsx'\n",
"list1 = []\n",
"dict1 = {}\n",
"dict2 = {}\n",
"dict3 = {}\n",
"wb = openpyxl.load_workbook(fi_xls)\n",
"sheet = wb.active\n",
"for n in range(2, sheet.max_row+1):\n",
" if sheet.cell(n,1).value is None:\n",
" break\n",
" else: \n",
" name = sheet.cell(n, 1).value.strip()\n",
" phone = str(sheet.cell(n, 5).value).strip()\n",
" #检查手机号码是否有重复\n",
" #if phone not in list1:\n",
" # list1.append(phone)\n",
" #else:\n",
" # print(name,phone)\n",
" dict1.setdefault(phone,{})\n",
" dict1[phone]['name'] = name\n",
" dict1[phone]['unit'] = sheet.cell(n, 6).value\n",
"filename = 'data/低碳院小鹅通人员信息.json'\n",
"with open(filename, 'w') as fl:\n",
" json.dump(dict1, fl, ensure_ascii=False)\n",
"print('ok')\n",
" \n"
]
},
{
"cell_type": "markdown",
"id": "fbd0c055-4d86-4383-9205-5b8888b8c686",
"metadata": {},
"source": [
"### 导入小鹅通人员信息 "
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "162e0573-e1c7-4538-bffa-c34eb5b40d8a",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"import os\n",
"import glob\n",
"import csv\n",
"\n",
"fi_path = 'data/小鹅通/'\n",
"dict1 = {}\n",
"fl = glob.glob(f'{fi_path}*.csv')\n",
"list1 = []\n",
"for fn in fl:\n",
" #with open(fn,'r',newline='',encoding='gb18030') as csv_file:\n",
" with open(fn,'r',newline='') as csv_file:\n",
" fl1 = csv.reader(csv_file,delimiter=',')\n",
" header = next(fl1) \n",
" for line in fl1:\n",
" #line = re.sub('[\\r\\n\\f ]{1,}', '', line)\n",
" list1.append(line)\n",
"for item in list1:\n",
" dict1.setdefault(item[0],{})\n",
" dict1[item[0]]['nick'] = item[1] \n",
" dict1[item[0]]['phone'] = item[11].strip()\n",
" dict1[item[0]]['progress'] = item[3]\n",
"filename = 'data/小鹅通人员信息.json'\n",
"with open(filename,'w') as fl:\n",
" json.dump(dict1, fl,ensure_ascii=False) "
]
},
{
"cell_type": "markdown",
"id": "8d9ec0a6-0b4d-456d-a886-ccccf3e29f3d",
"metadata": {},
"source": [
"### 关联低碳院小鹅通人员信息 "
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "b48f9fba-d8e9-4d47-a456-48065a912f5f",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"import os\n",
"\n",
"filename = 'data/小鹅通人员信息.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",
"for k, v in dict1.items():\n",
" phone = v['phone']\n",
" if phone in dict2.keys():\n",
" dict2[phone]['id'] = k\n",
" dict2[phone]['nick'] = v['nick']\n",
" dict2[phone]['progress'] = v['progress']\n",
"filename = 'data/低碳院小鹅通人员信息.json'\n",
"with open(filename, 'w') as fl:\n",
" json.dump(dict2, fl, ensure_ascii=False)\n",
"print('ok')\n",
" "
]
},
{
"cell_type": "markdown",
"id": "5ee64db3-7e59-4263-ae5b-d8529f1dca14",
"metadata": {},
"source": [
"### 导入小鹅通打卡信息 "
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "6fc5dd93-790a-4708-8dcc-98a74d7ce14d",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import openpyxl\n",
"import json\n",
"import os\n",
"import glob\n",
"import csv\n",
"import re\n",
"\n",
"\n",
"fi_path = 'data/小鹅通/打卡/'\n",
"fl = glob.glob(f'{fi_path}*.csv')\n",
"\n",
"dict1 = {}\n",
"for fn in fl:\n",
" with open(fn,'r',newline='') as csv_file:\n",
" list1 = []\n",
" fl1 = csv.reader(csv_file,delimiter=',')\n",
" group = re.findall(r'百日筑基”健康打卡—(.+)的打卡信息》',fn)[0]\n",
" \n",
" #print(group)\n",
" header = next(fl1)\n",
" #print(header)\n",
" header = next(fl1)\n",
" list2 = []\n",
" for line in fl1: \n",
" list2.append(line)\n",
" dict1[group] = list2\n",
"list1 = []\n",
"\n",
"for item in header:\n",
" \n",
" item = re.sub(r'\\t','',item)\n",
" print(item)\n",
" list1.append(item)\n",
"print(list1) \n",
"dict1['header'] = list1\n",
"#print(dict1)\n",
"\n",
"filename = 'data/小鹅通打卡信息.json'\n",
"with open(filename,'w') as fl:\n",
" json.dump(dict1, fl,ensure_ascii=False) "
]
},
{
"cell_type": "markdown",
"id": "d296a9f0-1fdd-483e-839e-b994d647c7f2",
"metadata": {},
"source": [
"### 统计小鹅通打卡信息 "
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "204fcae8-32e6-4016-b533-b8a8a750580e",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"import time\n",
"import csv\n",
"\n",
"filename = 'data/小鹅通打卡信息.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl) \n",
"filename = 'data/低碳院小鹅通人员信息.json'\n",
"with open(filename,'r') as fl:\n",
" dict2 = json.load(fl) \n",
"jiezhiri = '2022-11-21'\n",
"list_rq = dict1['header']\n",
"#print(list_rq)\n",
"num = list_rq.index(jiezhiri)\n",
"print(num)\n",
"list1 = list_rq[1:num+1]\n",
"list2 = []\n",
"#print(list1)\n",
"for k, v in dict1.items():\n",
" if k!='header':\n",
" for item in v:\n",
" nick = item[0]\n",
" record = item[1:num+1]\n",
" list2.append([k,nick,record.count('√')])\n",
"print(list2)\n",
"for item in list2:\n",
" nick = item[1]\n",
" unit = item[0]\n",
" for k, v in dict2.items():\n",
" if v['nick'] == nick and unit == v['unit']:\n",
" dict2[k]['daka'] = item[2]\n",
"\n",
"filename = 'data/低碳院小鹅通人员信息.json'\n",
"with open(filename, 'w') as fl:\n",
" json.dump(dict2, fl, ensure_ascii=False)\n",
"print('ok') "
]
},
{
"cell_type": "markdown",
"id": "2bfd1f6b-c863-46fe-95f5-48a233c376fe",
"metadata": {},
"source": [
"### 统计低碳院百日强基情况"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "c12b2d1b-774e-40c1-8a80-df3fa5889b61",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import json\n",
"import time\n",
"import csv\n",
"\n",
"filename = 'data/低碳院小鹅通人员信息.json'\n",
"with open(filename,'r') as fl:\n",
" dict2 = json.load(fl) \n",
"list1 = []\n",
"for k, v in dict2.items():\n",
" list2 = []\n",
" unit = v['unit']\n",
" name = v['name']\n",
" progress = v['progress']\n",
" if 'daka' in v.keys():\n",
" daka = v['daka']\n",
" else:\n",
" daka = 0\n",
" list2 = [unit,name,progress,daka]\n",
" list1.append(list2)\n",
"\n",
"filename = 'data/低碳院百日强基情况表(截止到20221121).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",
" "
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "9668d7d6-d51d-4fbe-8c0c-c8fa6066aad1",
"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"
}
},
"nbformat": 4,
"nbformat_minor": 5
}