Python轻办公——使用RE和简单文件读写实现批量自动计算活动分

🍉今天在整理班级品行表现分时(如下),突然觉得能否使用Python实现批量计算呢?毕竟一个一个计算核对实在是太考验人了!话不多说,直接开干

在这里插入图片描述
🍒想要批量实现,首先我们测试单个单元格计算的可行性

🍓考虑到需要将活动中的加分项全部取出,但是考虑到活动名称中可能还有时间,因此不可简单直接的将数值摘取出来,通过观察发现分值都是由左侧 ' + '开始,右侧字符结束,因此考虑使用正则表达式,其具体为从+开始取任意个数字,这样就可以将所有的加分取出来了,输出如下 :(正则表达式的更多使用由于近期本人时间问题不多做赘述,大家可以查看这篇文章,个人认为还是写的很详细的)

在这里插入图片描述

🍐通过检查可以发现使用正则能够将所有的加分取出,再使用简单的数值处理,将+去掉并求值就可以得到最终的活动得分了

在这里插入图片描述

能够单个求和只要进行简单的文件读写即可实现 批量求和,当批量求和之后大家将结果依次输出直接复制到Excel即可完成工作,不建议大家进行Excel的写入(Python的部分模块会覆盖原文件内容,即便是使用不覆盖原文件内容的模块也会清楚所有单元格格式
所有代码如下,代码关键处已用注释标注

注:对文件的操作需谨慎,建议提前备份

import xlutils.copy
import re
import xlrd2
import os
import xlwt
#  打开excel
data_excel = xlrd2.open_workbook("C:\\Users\\清明\\Desktop\\计算3+4品行表现分公示结果-第四学期.xlsx")
#  通过名称获取数据所在sheet表
table = data_excel.sheet_by_name(sheet_name='Sheet2')
# 返回某列中所有单元格的数据组成的列表,获得活动列表,每个元素就是一名同学参加的所有活动
cols_acts = table.col_values(6,start_rowx=2,end_rowx=None)      #  参数1表示第几列,以0开始;start_rowx表示起始行;end_rowx表示结束行,None表示以识别到空单元格结束
#  从第3行(下标0开始)进行写入,做简单的计数
count = 2
#  将读取模块读取的文件内容复制到写入模块的文件中
wb = xlutils.copy.copy(data_excel)
#  通过索引获取第2个Sheet表,使用sheet_by_name获取的Sheet不能使用write()方法
ws = wb.get_sheet(1)
#  循环执行求和操作
for i in cols_acts:
    r = re.findall("\+\d+",i)
    print(r)
    res = []
    for j in r:
        res.append(int(j.replace('+','')))
    #  三个参数(X,Y,Z)分别表示第X行,第Y列,写入数据  下标索引均从0开始
    ws.write(count,7,sum(res)+20)
    count += 1
#  通过保存到同路径下同文件名进行覆盖来达到写入数据的目的
wb.save('C:\\Users\\清明\\Desktop\\计算3+4品行表现分公示结果-第四学期.xlsx')

在这里插入图片描述

🍉最终文件单元格格式被修改,所以建议大家还是不要使用文件写入,直接将结果输出复制粘贴即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Insight.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值