请问怎么通过Python openpyxl模块把Excel成绩一列前30%的分数(向上取整)设置为优,后30%的分数(向下取整)设置为一般,剩余的分数设置为良呢?
前百分之几这个我没找到相关的代码。向上/向下取整我查到的基本是四舍五入型的取整,但是表格中的分数都是整数啊,向上/向下取整有什么意义吗?求解,非常谢谢!
请问怎么通过Python openpyxl模块把Excel成绩一列前30%的分数(向上取整)设置为优,后30%的分数(向下取整)设置为一般,剩余的分数设置为良呢?
# 大概思路:
# 1. 获取所有分数的列表 2. 去掉重复项的分数然后降序排序 3. 查找 前后30%的分数临界值 4.对比临界值修改Excel,并保存
# 前后30%的分数临界值是主要逻辑
>>> import openpyxl
>>> import math
>>> wb = openpyxl.load_workbook("F:/MyPython/score.xlsx")
>>> sheet = wb.active
>>> max_row = sheet.max_row
>>> scores = [ sheet.cell(row,3).value for row in range(5,max_row+1)] # 获取所有分数的列表
>>> scores = list(map(lambda x: 0 if x is None else x,scores)) # 如果成绩列没有填写 就按0处理
>>> score_list = list(set(scores)) # 去掉重复分数后的列表
>>> score_list.sort(reverse=True) # 列表 从分数高到低排序
>>> topPercent30 = math.ceil(len(score_list)*0.3) # 前30%的分数序号
>>> topPercent30 = score_list[topPercent30-1] # 前30%的分数值
>>> lastPercent30 = int(len(score_list)*0.7) # 后30%的分数序号
>>> lastPercent30 = score_list[lastPercent30-1] # 后30%的分数值
>>> for cell in sheet.iter_rows(min_row=5,min_col=3,max_col=4):
socre = cell[0].value
if socre is None or socre<=lastPercent30:
cell[1].value = "一般"
elif socre>=topPercent30:
cell[1].value = "优"
else:
cell[1].value = "良"
>>> wb.save(filename="F:/MyPython/score_grade.xlsx")