python-openpyxl实战

目录

  • 任务需求
  • 前提条件
  • 代码实现
  • 结果


任务需求

在表格中
每个考生下的同一个课目的同一个试卷类型的这些成绩为一组,编辑大于2个标准差和大于3个标准差的数值(加上平均值)
首先看一下长度
在这里插入图片描述python-openpyxl实战_第1张图片
emm 手动是不可能了,那就用python openpyxl来处理.


提示:以下是本篇文章正文内容,下面案例可供参考

前提条件

按四个标注, 以type来划分, 每一个学号的科目代码 type来划分
python-openpyxl实战_第2张图片

代码实现


import numpy
from openpyxl import Workbook
import openpyxl

f = openpyxl.load_workbook('task.xlsx', read_only=False)
sht = f.active

def gainStd():

    #print(sht.max_row,sht.max_column)
    std=[]
    avg=[]
    temp_count=[]
    pre=1
    for i,data in enumerate(sht.iter_rows()):
        if(i==0):
            continue
        #print(data[3].value)
        if(data[2].value!=pre):
            std.append(numpy.std(temp_count))
            avg.append(numpy.mean(temp_count))
            temp_count=[]
            temp_count.append(data[3].value)
        else:
            temp_count.append(data[3].value)
        pre = data[2].value
    std.append(numpy.std(temp_count))
    avg.append(numpy.mean(temp_count))
    return  std,avg

pre=1
std,avg= gainStd()


count=0
for i, data in enumerate(sht.iter_rows()):
    if (i == 0):
        continue
    if(data[2].value!=pre):
        count+=1
        if (data[3].value > avg[count]+2 * std[count]):
            sht.cell(i+1, 5).value = '✓'
        #处理中间值
        if(data[3].value>avg[count]+3*std[count]):
            sht.cell(i+1,6).value='✓'
    else:
        #处理过程值
        if(data[3].value>avg[count]+2*std[count]):
            sht.cell(i+1,5).value='✓'
        if(data[3].value>avg[count]+3*std[count]):
            sht.cell(i+1,6).value='✓'
    pre = data[2].value

f.save('pur.xlsx')


结果

可以看到:短短几秒python已经处理完成了,经过 测试
完成任务
挑一个贴上
python-openpyxl实战_第3张图片

你可能感兴趣的:(python学习,python,开发语言,后端)