过年了,还在写Python呢[日常]

HamletKent 发布于3天前 阅读61次
0 条评论

在整理月度考核数据,一样用Python来做,其中一个模块是把人员等级表整理出来。别告诉我Excel就很方便,陆陆续续做这个项目工具很久了,除了各种考核处理,还堆叠了很多其他的功能,都是结合Python + Excel的方式做的,在考虑2018年是不是需要重构/重写一下?

比如这样的一张表:

过年了,还在写Python呢[日常]

用openpyxl来操作Excel(前面也有人问我用啥Python第三方库操作Excel):

import openpyxl

objExcelFile = openpyxl.load_workbook('./score.xlsx')
sheet = objExcelFile['Sheet1']

然后,读取Excel表数据并归入一个List中:

from collections import namedtuple

SCORE = namedtuple('SCORE', 'name, score')
scoreTable = [SCORE(
    sheet.cell(row=row, column=1).value,
    sheet.cell(row=row, column=2).value)
    for row in range(2, 14)]

接下来排序、GroupBy:

from itertools import *
from operator import itemgetter

def cmp(record):
    return (record.score >= 90 and '优秀'
            or record.score >= 80 and '良好'
            or record.score >= 70 and '一般'
            or '差评')
sortedScoreTable = sorted(scoreTable, key=itemgetter(1), reverse=True)

gradeMap = {grade: [{g.name: g.score} for g in group]
    for grade, group in groupby(sortedScoreTable, lambda record: cmp(record))}

最后效果输出如下:

for g in gradeMap.items():
    print(f'{g[0]}: {g[1]}')

# Result
# 优秀: [{'王二': 99}, {'关注': 98}, {'白马': 97}, {'锋刃': 97}, {'李四': 96}, {'张三': 95}, {'常用': 95}]
# 良好: [{'李笑': 87}, {'花旗': 86}, {'高深': 83}]
# 一般: [{'为佳': 75}]
# 差评: [{'思索': 67}]

要过年了,一年又一年,感谢Python这个神器,帮我解决了许许多多问题。新年快乐!

查看原文: 过年了,还在写Python呢[日常]

  • blackfrog
  • orangesnake
  • tinyleopard
  • heavyrabbit
  • bluebear
  • beautifulsnake
需要 登录 后回复方可回复, 如果你还没有账号你可以 注册 一个帐号。