python自动化办公实例(使用openpyxl、os处理统计Excel表中的数据并将其合并)

源数据格式

以其中一个表格为例

可以看到表中数据比较杂乱且并没有我们想要的数据、指标(如一等奖、二等奖的数量)不利于下一步数据的分析。所以我们需要手动对数据进行一些处理,大致格式如下:

数据处理格式

这里的手动处理可以通过优化我们的代码来进行一些简化以减少我们的工作量(如其他列不用删只要把奖项这里的列名进行统一就好了、文件名其实也可以不用进行重命名可以直接用我们之前的名字这样不仅可以减少工作量又可以让表的名字更加清晰且有辨识度)不过由于本人之前并未接触过python相关库的使用所以代码写完之后才意识到这些问题。以后有时间再把代码优化优化......

数据处理好存储在一个文件目录下就可以开始运行我们的代码了

代码

import openpyxl
import os
'''1、使用代码前请检查表格格式2、请安装相应的库(openpyxl、os、pandas)3、代码运行前需关闭打开的需要处理的文件4、本人水平有限,如果一直报错请上CSDN........
'''
dizhi1=input("请输入原数据存储的路径:")
dizhi2=input("请输入数据处理后存储的路径:")
# 当前目录
base_dir = dizhi1
# 获取当前目录下的所有文件
# 遍历文件列表,输出文件名
#获取绝对路径        files = [os.path.join(base_dir, file) for file in os.listdir(r"{}".format(base_dir))]for file in os.listdir(r"{}".format(base_dir)):print(file)# 获取工作簿对象wb = openpyxl.load_workbook(r'{}/{}'.format(dizhi1,file))wb2=openpyxl.load_workbook('湖南省本科院校清单.xlsx')# 获取所有工作表名称print(wb.sheetnames)# 获取工作表对象sheet1 = wb.worksheets[0]sheet_2 = wb2.worksheets[0]# 设置Sheet名称sheet1.title = '竞赛成绩'# 创建一个新sheet,可以指定名称,index表示新创建的工作簿放在第几个位置, index从0开始计数sheet2 = wb.create_sheet(index=1, title='竞赛成绩统计及汇总')# 获取所有工作表名称print(wb.sheetnames)#获取名单b=[]#名单# 获取工作表总行数rows_2 = sheet_2.max_row# 获取工作表总列数cols_2 = sheet_2.max_column# 总行,总列print(rows_2, cols_2)for i in range(2, rows_2):cell_value = sheet_2.cell(row=i, column=1).valueb.append(cell_value)print(b)#给表二的列命名sheet2['A1'] = '学校'sheet2['B1'] = '一等奖'sheet2['C1'] = '二等奖'sheet2['D1'] = '三等奖'sheet2['E1'] = '获奖总数'sheet2['F1'] = '排名'sheet2['G1'] = '排名指标'sheet2['H1'] = '综合竞赛指标'# 获取所有工作表名称print(wb.sheetnames)# 获取工作表总行数rows = sheet1.max_row# 获取工作表总列数cols = sheet1.max_column# 总行,总列print(rows, cols)# 读取所有内容zs=0#获奖总数no1=0#一等奖no2=0#二等奖no3=0#三等奖mz=[]a=[]#初始表x=[]#最终表for i in range(1, rows+1):row_list = []for j in range(1, cols+1):cell_value = sheet1.cell(row=i, column=j).valuerow_list.append(cell_value)a.append(row_list)for i in range(1, rows):name=a[i][0]if(name not in mz and name in b):zs=0no1=0no2=0no3=0zhzb=0mz.append(name)for j in range(1, rows):if a[j][0] == name:zs = zs + 1if a[j][1] == '一等奖' or a[j][1] == '一等':no1 = no1 + 1if a[j][1] == '二等奖' or a[j][1] == '二等':no2 = no2 + 1if a[j][1] == '三等奖' or a[j][1] == '三等':no3 = no3 + 1print(name,zs, no1, no2, no3)# 竞赛综合指标依据2021年度吉首大学教学奖励办法,按照导向性、重点性、示范性原则制定zhzb = no1 * 0.5 + no2 * 0.2 + no3 * 0.1# 写入多个单元格(追加模式,不会覆盖之前的,从有数据的下一行开始)#sheet2.append([name,no1,no2,no3,zs,None,None,zhzb])x.append([name,no1,no2,no3,zs,None,None,zhzb])x.sort(key=lambda x: (x[1], x[2], x[3]),reverse=True)n=len(x)s=100pm=1t=x[0][1:4]for i in range(n):#print(t[1],x[i][1]);if(x[i][1:4] != t):pm=i+1print(pm)x[i][5]=pmx[i][6]=round(s-(pm-1)*(100/n),2)sheet2.append(x[i])t=x[i][1:4]# 保存print(x)wb.save(r"{}\{}".format(dizhi2,file))

注释全写在代码里了哦

数据处理后的格式

将处理汇总好的数据放在了另一个表里

附录

湖南省本科院校清单

我直接把这个表放在了python文件的同一目录下以便调用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/56504.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基础算法(6)——模拟

1. 替换所有的问号 题目描述: 算法思路: 从前往后遍历整个字符串,找到问号之后,尝试用 a ~ z 的每一个字符替换即可 注意点:需考虑数组开头和结尾是问号的边界情况 代码实现: class Solution {public …

《深度学习》OpenCV FisherFaces算法人脸识别 原理及案例解析

目录 一、FisherFaces算法 1、什么是FisherFaces算法 2、原理 3、特点 4、算法步骤 1)数据预处理 2)特征提取 3)LDA降维 4)特征投影 5)人脸识别 二、案例解析 1、完整代码 运行结果: 一、Fish…

【题解】【记忆化递归】——Function

【题解】【记忆化递归】——Function Function题目描述输入格式输出格式输入输出样例输入 #1输出 #1 提示数据规模与约定 1.思路解析2.AC代码 Function 通往洛谷的传送门 题目描述 对于一个递归函数 w ( a , b , c ) w(a,b,c) w(a,b,c) 如果 a ≤ 0 a \le 0 a≤0 或 b ≤…

阿里Dataworks使用循环节点和赋值节点完成对mongodb分表数据同步

背景 需求将MongoDB数据入仓MaxCompute 环境说明 MongoDB 100个Collections:orders_1、orders_2、…、orders_100 前期准备 1、MongoDB数据源配置 需要先保证DW和MongoDB网络是能够联通的,需要现在集成任务中配置MongoDB的数据源信息。 具体可以查…

项目分析:自然语言处理(语言情感分析)

在这个信息爆炸的时代,我们每天都在与海量的文本数据打交道。从社交媒体上的帖子、在线评论到新闻报道,文本信息无处不在。然而,这些文本不仅仅是文字的堆砌,它们背后蕴含着丰富的情感和观点。如何有效地理解和分析这些情感&#…

Linux下的防病毒软件(Antivirus software for Linux)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…

FFmpeg的简单使用【Windows】--- 指定视频的时长

目录 功能描述 效果展示 代码实现 前端代码 后端代码 routers 》users.js routers 》 index.js app.js 功能描述 此案例是在上一个案例【FFmpeg的简单使用【Windows】--- 视频混剪添加背景音乐-CSDN博客】的基础上的进一步完善,可以先去看上一个案例然后再…

docker环境安装mongoDB实现平滑迁移实战

docker环境安装mongoDB实现平滑迁移实战 一、备份原始数据(从别的服务器备份到当前服务器)二、数据迁移三、迁移过程日志打印四、验证迁移数据准确性 一、备份原始数据(从别的服务器备份到当前服务器) 使用mongodump工具对原始mo…

Java发送请求实现QPS限制

业务场景 在开发中,当有业务需求需要调用第三方服务实现功能,但是服务接口有QPS限制,所以我们需要在发送请求时限制发送频率防止请求失败。 实现方法 使用 Java Semaphore 类来实现控制请求QPS QPS限制 Component public class QPSControll…

MySQL 8.4修改user的host属性值

MySQL 8.4修改user的host属性值 update mysql.user set host localhost where user mysql用户名; MySQL 8.4修改初始化后的默认密码-CSDN博客文章浏览阅读804次,点赞6次,收藏11次。先下载mysql的zip压缩包:MySQL :: Download MySQL Communi…

STL-string

STL的六大组件&#xff1a; string // string constructor #include <iostream> #include <string> using namespace std; int main() {// 构造std::string s0("Initial string");std::string s1; //nullptrstd::string s2("A character sequenc…

【在Linux世界中追寻伟大的One Piece】Jsoncpp|序列化

目录 1 -> Jsoncpp 1.1 -> 特性 1.2 -> 安装 2 -> 序列化 3 -> 反序列化 4 -> Json::Value 1 -> Jsoncpp Jsoncpp是一个用于处理JSON数据的C库。它提供了将JSON数据序列化为字符串以及从字符串反序列化为C数据结构的功能。Jsoncpp是开源的&#xf…

RHCSA复习题

第一~七章 1.创建以下目录和文件结构&#xff0c;并将/yasuo目录拷贝4份到/目录下。 [rootlocalhost ~]# mkdir /yasuo [rootlocalhost ~]# mkdir /yasuo/dir1 [rootlocalhost ~]# cd /yasuo/dir1 [rootlocalhost dir1]# touch hostname hostname02 passwd ssh_config sshd [r…

F5-TTS开源项目详解:非自回归语音合成技术革新与应用场景

在现代科技的推动下&#xff0c;语音合成技术取得了长足的进步。随着越来越多的场景开始依赖语音交互&#xff0c;如何高效、自然地生成语音成为了行业的一个重要课题。今天我们要讨论的是一个在语音合成领域备受瞩目的开源项目——F5-TTS。它不仅采用了非自回归架构&#xff0…

Arduino配置ESP32环境

Arduino配置ESP32环境 引言一、IDE下载教程操作取巧方法 二、社区安装包三、官方手动安装 引言 最近入手了一款ESP32-C3的开发板&#xff0c;想继续沿用现有Arduino IDE&#xff0c;网上看了很多方法&#xff0c;大致分了三类&#xff1a;IDE下载、社区安装包、github手动配置…

南京邮电大学电工电子A实验十一(数据选择器及逻辑电路的动态测试)

文章目录 一、实验报告预览二、Word版本报告下载 一、实验报告预览 二、Word版本报告下载 点我

2.Java--入门程序

一、开发Java程序 步骤&#xff1a; 1.编写代码 其中第一行的HelloWorld叫类名&#xff0c;下面的框架叫main()方法&#xff0c; 类名要和文件名一致&#xff0c; 2.编译代码 用Javac进行编译&#xff0c;将编写的代码保存之后&#xff0c;打开WindowsR输入cmd 用cd文件夹…

rom定制系列------小米6x_澎湃os1.0.28安卓13定制固件修改 刷写过程与界面预览

&#x1f49d;&#x1f49d;&#x1f49d; 在接待很多定制化系统过程中。小米6x机型为很多工作室客户使用。但官方低版本固件无法适应新应用的使用。有些第三方固件却可以完美解决。此固件是客户分享的卡刷固件。需要修改为可以批量刷写的线刷固件。去除一些内置应用。需要自带…

Spring使用注解进行依赖注入

一、原则 不要把选择留给Spring 二、Autowired&#xff08;Spring注解&#xff09; 流程图&#xff1a; Spring依赖注入-Autowired 截图&#xff1a; 三、Resource&#xff08;JDK注解&#xff09; 流程图&#xff1a; Spring依赖注入-Resource 截图&#xff1a;

Docker-Harbor概述及构建

文章目录 一、Docker Harbor概述1.Harbor的特性2.Harbor的构成 二、搭建本地私有仓库三、部署 Docker-Harbor 服务四、在其他客户端上传镜像五、维护管理Harbor 一、Docker Harbor概述 Harbor 是 VMware 公司开源的企业级 Docker Registry 项目&#xff0c;其目标是帮助用户迅…