Python自动化开发-考勤处理

一、前提声明

1、Excel打开失败

python的xlrd读取Excel数据失败: raise XLRDError(FILE_FORMAT_DESCRIPTIONS[file_format]+’; not supported’) xlrd.biffh.XLRDError: Excel xlsx file; not supported
Python自动化开发-考勤处理_第1张图片

原因:xlrd升级后不支持xlsx文件读取了,通过降低版本

同过 pip list 查看xlrd的版本

卸载2.0.1版本

Python自动化开发-考勤处理_第2张图片

安装指定版本1.2.0

Python自动化开发-考勤处理_第3张图片

二、完整代码及结果

1、代码

"""
迟到早退:
    5 < time > 10 20
    10 < time 50
只一次卡
    扣20
不打卡
    扣1.5
调休
    当月天数够,不扣,不够扣1.5
"""
import xlrd  #操作excel的工具

def runs(num):#处理数据函数
    t_rs = [0,0,0,0]  #迟到5分   迟到10分  只打卡一次 矿工
    for j in range(1,11):
        t = sheet.cell_value(num,j)
        all_time = t.split('  ') if len(t) != 0 else []
        #print(all_time)
        count = len(all_time)  #列表中打卡时间的次数
        #print(count)
        if count == 0:  #没有打卡
            t_rs[3] += 1
        else: #已经打卡
            start = all_time[0]
            t_start = tranforms(start)
            if count == 1: #只打卡一次
                t_rs[2] += 1
                c = compare_time(t_start)
            else: #打了多次卡
                end = all_time[-1] #最后一次打卡时间
                t_end = tranforms(end)
                if t_end[0] - t_start[0] < 3:  #同一个上午或下午打多次卡 9:00 到 12:00 或 12:00 到18:00
                    t_rs[2] += 1 #记录一次只打一次卡
                    if t_end[0] < 12: #判断多次打卡是不是上午
                        c = compare_time(t_start)
                    else:
                        c = compare_time(t_end)
                    statistics(c,t_rs)
                else:
                    a = compare_time(t_start)
                    p = compare_time(t_end)
                    statistics(a,t_rs)
                    statistics(p,t_rs)
    return t_rs

def statistics(c,t_rs):
    if c > 5 and c < 10:
        t_rs[0] += 1
    elif c >= 10:
        t_rs[1] += 1

def tranforms(tmp_time):
    hour,minute = tmp_time.split(':')
    sum_minute = int(hour)*60+int(minute)
    return [int(hour),int(minute),sum_minute]

#tmp_time[0]是tranforms()的三个返回值的第一个hour
def compare_time(tmp_time):  #比较时间,迟到或早退返回正数(迟到或早退多少分钟)
    if tmp_time[0] < 12: #9:00 签到
        c = tmp_time[2] - 9*60
    else:
        c = 18*60 - tmp_time[2]
    return c if c>0 else 0

if __name__ == '__main__':
    excel = xlrd.open_workbook('kaoqing.xlsx')
    sheet = excel.sheets()[0]
    for i in range(1,sheet.nrows):
        #print(sheet.cell_value(i,0))
        one_rs = runs(i)
        print(f'姓名:{sheet.cell_value(i,0)}--迟到5分钟:{one_rs[0]}次,迟到10分钟:{one_rs[1]}次,只打卡一次:{one_rs[2]}次,旷工:{one_rs[3]}次')

#读取数据

#处理数据15
#查看结果

2、结果

你可能感兴趣的:(自动化,运维)