python实例应用之导入Excel完成简单计算

暑假放假没回家,留校学习,在期末成绩出来的那天中午,辅导员突然一句在吗?
在这里插入图片描述
我瞬间明白又有事情做了。果然,她把整个年级的成绩发给我,让我来算一下加权平均成绩(一万多条数据啊啊啊!!),想想寒假时伸着冻的僵硬的手算,感觉自己好傻。所以这次我找了大佬gyg让帮忙找一下能不能利用excel算,结果大佬一顿操作,直接用Java就算出来了,这次真的是贼舒服了,简单校对了几条数据发现,精确度不太准,由于评优要用,遂放弃了数据另寻出路;本来打算找几个人,直接人工计算,但这样真的是太傻了,对不起自己的专业,再加上我留校这几天学了一丢丢python,所以想试试能不能学一下大佬,也写一个类似的小东西,没成想被我这个菜鸟弄成功了。(瞎叨叨了这么多,下面开始说一下我在做的过程中遇到的问题)

说明:加权平均成绩 = Σ(课程学分*课程成绩)/(Σ课程学分)

首先,我想对Excel表格简单处理一下,通过Excel内置的函数算一下(课程学分*课程成绩),但是每一次,数据相乘的结果都跟预期的不一致,甚至怀疑Excel内置函数是不是辣鸡,还有怀疑在DY关注的一个发Excel技巧的人(称他为小D)是不是也是一个辣鸡。所有的方法都不能用,然后就各种怀疑人生,各种求救。最后gyg大佬在用Java计算时发现学分跟成绩的数据类型不是数字,不是数字,不是数字啊(真的有些抓狂)

在这里插入图片描述

把数据转换成数字后,这才发现Excel内置函数真的强大,小D是真的是牛批(破音),首先我在每位同学成绩的下方加了一空行,然后通过小D的技巧,基本上是一键求除了所有同学的Σ(课程学分*课程成绩)和所有同学的Σ课程学分,接下来只需要将这两个数字相除就行了。!!!但是!!!这写数据是分散在各个学生成绩的下方的,通过Excel就不能一键计算了。

在这里插入图片描述

于是乎,Python就上场了,我百度了一下操作.xlsx文件的第三方库,选了一个名为openpyxl的,接下来就是写python代码了:

首先,我下载了openpyxl
写代码的思路是:由于Σ(课程学分*课程成绩)Σ课程学分前面空了一个单元格,于是我想通过判断第一个单元格是否为空来计算,经过一番尝试,发现好像不行(现在想想,好像是忘记写row后面的.value 才导致判断不出来(只是猜测,没有尝试)),于是,我又通过小D的技巧,加上百度同时填多个选中单元格的方法,算是一键将那个空单元格填上了一个数字(预期的)。但是,这个添加上的居然还是一个文本类型的,我在判断的时候,只有一个同学的成绩,awsl,我这不争气的脑子,居然还在这个上栽跟头,然后我在想,难道我还要一个一个更改数据类型吗?当然不可能。既然既有数字类型,又有文本类型,那我就改一下if条件呗,不管你是文本('1')还是数字(1)(只要不是姓名)我都要算,下面就是Python代码了,真的是非常少了。
from openpyxl import load_workbook  #调用

# 打开Excel文件
wb = load_workbook(filename='really.xlsx', data_only=True)
ws = wb.active

for row in ws.rows:
        if row[0].value in[ '1', 1]:
                print(row[2].value/row[1].value)

代码写好了,准备运行测试,但是它找不到已经准备好的.xlsx文件,真是路途坎坷啊,遂又百度了一下,原来对应的python脚本要跟.xlsx文件放在同一个目录下(我一个放在了桌面,一个放在了E盘),解决了这个之后,开始测试截取出来的部分数据,终于成功了呜呜呜呜呜,然后二话不说,直接就开始算整个年级的成绩了。效果图?

在这里插入图片描述

我粘出来就能用了,啊哈哈哈哈(笑抽ing),然后简单的整理,将每个班的分开就完了

后记:因为这个在shell中直接能粘贴出来,我也没学如何将数据写回.xlsx文件,不过这样已经是非常快了(嗖嗖嗖),抑制不住的欢乐咦嘿嘿嘿,经过这一次,我更加深刻的体会到,知识就是力量,我得加油了!!!(纪念第一次通过编程解决生活问题)

猜你喜欢

转载自blog.csdn.net/weixin_43716048/article/details/96317667
今日推荐