怎么用Python实现自动化处理每月考勤缺卡数据

一、效果展示

1.实现效果

首先来看下实现效果。

怎么用Python实现自动化处理每月考勤缺卡数据

大体实现步骤如下:

步骤1:在D盘中新建“每月缺卡数据处理“文件夹(已在代码中固定死了,必须建该文件夹)。

步骤2:把处理考勤缺失的exe文件和原始数据文件放到step1新建的文件夹中。

步骤3:点击exe文件,会自动出来csv结果文件,具体格式如下:

怎么用Python实现自动化处理每月考勤缺卡数据

2.原始数据模板

原始数据文件需为”判断是否提交日志2.xlsx“,本文使用的原始数据如下(表头需按如下命名):

怎么用Python实现自动化处理每月考勤缺卡数据

注:如需本文原始数据、和直接运行得到结果的exe文件,可点击链接获取 提取码vb6x

其中填报人指学生或员工姓名,部门若为学生可以填某某班。

填报时间指日志填报时间,日期指日志实际日期。若为考勤打卡,两个日期都填实际打卡的日期即可。

若为考勤打卡,今日完成工作列可置为空。

如果原始文件中想存放员工打卡的全年数据,但想统计其中某个月的缺卡数据。

只需把想统计的月份放在日期的名列前茅行即可,代码中已按日期名列前茅行进行了同年月数据子框的筛选。

如需设置定时任务,把运行结果定时邮件发送给相关人员,可以私信我。

二、代码详解

对于部分了解Python的朋友来说,如果有个性化的需求,可以自己微调代码实现需求。接下来详细阐述实现上述功能的代码。

1.导入库

首先导入本文需要加载的库,如果你有些库还没有安装,导致运行代码时报错,可以在Anaconda Prompt中用pip方法安装。

# -*- coding: UTF-8 -*-'''代码用途 :处理缺卡数据作者     :阿黎逸阳博客     :  https://blog.csdn.net/qq_32532663/article/details/106176609'''import osimport calendarimport numpy as npimport pandas as pdfrom datetime import datetimefrom xlrd import xldate_as_tuplefrom chinese_calendar import is_workdayfrom chinese_calendar import is_holidayfrom chinese_calendar import get_holiday_detail

本文应用到了os、calendar、numpy、pandas、datetime、xlrd、chinese_calendar库。

os库可以设置文件读取的位置。

calendar和chinese_calendar库是日期处理库。

numpy和pandas库处理数据框。

xlrd和datetime库处理时间。

2.定义时间处理函数

接着应用xlrd和datetime库中的函数定义时间处理函数,把时间戳或带时分秒的时间转换成只含年月日的时间。

def num_to_date(x):       '''    日期处理函数    把时间戳或带时分秒的时间转换成只含年月日的时间    '''    try:        x1 = datetime(*xldate_as_tuple(x, 0)).strftime('%Y-%m-%d')    except:        x1 = datetime.date(x).strftime('%Y-%m-%d')    return x1

定义成年月日统一时间的目的是为了方便后续代码的运行。

3.读取数据调整日期格式

接着读取数据,应用第二小节定义的时间处理函数把填报时间和日期进行处理。

#读取数据os.chdir(r'D:每月缺卡数据处理')date = pd.read_excel('判断是否提交日志2.xlsx', sheet_name='Sheet1')#调整日期格式date['填报时间'] = date['填报时间'].apply(num_to_date)date['日期'] = date['日期'].apply(num_to_date)

原始部分数据如下:

怎么用Python实现自动化处理每月考勤缺卡数据

调用时间处理函数得到的部分数据如下:

怎么用Python实现自动化处理每月考勤缺卡数据

4.计算工作日天数

接着取出数据框日期列的名列前茅个值,获取要统计的年月信息。根据年月信息获取该月工作日的天数。

#取出想看缺卡信息的年月y_m1 = date['日期'][0][0:7] def sele_ym(x, y_m=y_m1):    '''    判断数据框中的日期是否为某月    '''    if x.find(y_m)>=0:        return True#找出这一个月中的工作日,求出工作日的天数days = calendar.Calendar().itermonthdates(int(y_m1.split('-')[0]), int(y_m1.split('-')[1]))    mth_nwkdays = []  #非工作日mth_wkdays = []   #工作日mth_days = []     #全部日期for day in days:      if str(day).find(y_m1)>=0:        #print(str(day))        mth_days.append(str(day))        if is_workday(day)>0:            mth_wkdays.append(str(day))        else:            mth_nwkdays.append(str(day))work_days = len(mth_wkdays)    #工作日天数

把工作天数和员工本月的实际打卡或写日志的天数进行对比,如果实际值小于理论值,说明员工缺卡或请假了。

由于大部分的员工都是正常打卡或写日志的,这时人工再对缺卡员工进行排查已经极大地缩小了排查面。

5.获取缺卡名单

最后调用函数获取缺卡名单,主要是对每个填报日期和实际工作日期进行比对。

#定义获取缺卡信息的函数def stat_dail_short(date, y_m1, work_days):    '''    date:存储日志的数据大表    y_m1:月份    work_days:该月的工作天数    '''    qk_file = []    date_m = date[date['日期'].apply(sele_ym)==True]    for i in set(date_m['填报人']):        sub_date = date_m[date_m['填报人'] == i]        if len(sub_date['日期'])<work_days:            qk = str(set(sub_date['填报人'])) + str(set(sub_date['部门'])) + '缺了'+ str((work_days-len(sub_date['日期']))) + '次卡' + ';缺卡日期为:'+ str(set(mth_wkdays)^set(sub_date['日期']))            qk_file.append(qk)            print(set(sub_date['填报人']), set(sub_date['部门']), '缺了%d次卡'%(work_days-len(sub_date['日期'])), ';缺卡日期为:', set(mth_wkdays)^set(sub_date['日期']),sep='')    qk_file_1 = pd.DataFrame(qk_file)    qk_file_1.columns = ['缺卡信息']    qk_file_1.to_csv(y_m1+' 缺卡名单'+'.csv', encoding='gbk')     #调用函数获取缺卡名单stat_dail_short(date, y_m1, work_days)

得到结果:

{‘张继科’}{‘体育部’}缺了5次卡;缺卡日期为:{‘2022-04-11’, ‘2022-04-29’, ‘2022-04-22’, ‘2022-04-18’, ‘2022-04-21’}
{‘杨紫’}{‘历劫部’}缺了1次卡;缺卡日期为:{‘2022-04-20’}
{‘刘诗雯’}{‘体育部’}缺了2次卡;缺卡日期为:{‘2022-04-18’, ‘2022-04-28’}

结果中的数据是用填报人、填报部门、缺卡次数、具体的缺卡日期进行拼接展示的。会以csv的形式存放到指定文件夹中。

如果需要把姓名、部门、缺卡次数等信息分开,可以在excel中按特定条件分列,或调整一下代码进行实现。

本文开头的exe文件生成方法,可以参考下文

Pinstaller(Python打包为exe文件)

之前自己把 Python 文件打包成 exe 的时候,折腾了很久,本文将详细地讲述如何快速生成在不安装 Python 的电脑上也能执行的文件

1. 在 prompt 中运行 pip install pyinstaller , 安装 pyinstaller

怎么用Python实现自动化处理每月考勤缺卡数据

2. 在 prompt 中运行 where pyinstaller

怎么用Python实现自动化处理每月考勤缺卡数据

3. 找到待打包文件存放的路径

把要打包的文件放到找到的路径

C:UsersAdministratorAnaconda3Scripts 中 (我的路径是这个,你就按照第二步的路径)

4. 调用 cmd 窗口

把待打包文件放在

C:UsersAdministratorAnaconda3 Scripts 目录下,在该文件夹中按shift+鼠标右键 , 点击 在此处打开命令窗口 调用 cmd

5. 在 cmd 中输入 pyinstaller -F 文件名

例子:打包 Python 绘制皮卡丘的视频,在cmd中输入 pyinstaller -F pkq_1.py

即可生成普通图标的exe可执行文件。

6. 生成 exe 文件

可以在路径

C:UsersAdministratorAnaconda3Scripts 下的 dist 文件夹中找到打包好的exe文件(即不用安装 Python 也可以运行的文件)。

这样生成的文件图标是标准固定格式,如果想生成特定特定形状的图标需要用第7点中的语句。

7. 生成自定义形状的图标,在cmd中输入:pyinstaller -i ico路径 -F xxxxx.py

例子: 打包 Python 绘制皮卡丘视频的py文件,在cmd中输入 (注: 我把ico图标和待打包文件放到一个文件夹下了, 所以直接输入了ico的名字)

pyinstaller -i  pikaqiu2.ico -F pkq_1.py

生成图标是皮卡丘形状的exe文件。

我在生成exe的过程中一直有报错,后面在网上看到方法说先在cmd中运行pip uninstall matplotlib,再运行生成exe的语句就不会报错。

按网上方法真成功了,虽然没有明白原理,但还是非常感谢!如果你在打包的时候没有报错,还是不建议删除matplotlib库。

到此,关于“怎么用Python实现自动化处理每月考勤缺卡数据”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

文章标题:怎么用Python实现自动化处理每月考勤缺卡数据,发布者:亿速云,转载请注明出处:https://worktile.com/kb/p/28049

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
亿速云亿速云认证作者
上一篇 2022年9月21日 上午12:22
下一篇 2022年9月21日 下午10:40

相关推荐

  • 电脑黑白打印机打印图片底色黑如何解决

    解决方法 方法一: 1、首先在“Photoshop”中打开想要打印的图片。 2、打开后,点击左上角“图像”,选择“自动色调” 3、软件会自动为你调整背景色,如果还是觉得黑,可以继续调节。 4、继续点击“图像”,打开“调整”下的“色阶”选项。 5、打开后,按住图示位置的滑块,向左滑动。(根据预览情况自…

    2022年9月24日
    60200
  • mysql怎么增加少数索引

    三种增加方法:1、使用“CREATE INDEX”语句增加,语法“CREATE UNIQUE INDEX 索引名 ON 表名(列名列表);”;2、建表时增加,语法“CREATE TABLE 表名(… UNIQUE KEY(列名列表) );”;3、修改表时增加,语法“ALTER TABLE…

    2022年9月22日
    2.7K00
  • windows todesk如何传输文件

    todesk传输文件的方法 1、 打开ToDesk,进入“设备列表”,选中想要传输的对象 2、选中后,点击右侧的“文件传输”,就能将需要的文件传给对方了 3、或者还有一种方法,就是点击工具栏箭头按钮 4、选择“文件” 5、最后在其中选中文件夹就可以进行文件的传输了。 感谢各位的阅读,以上就是“win…

    2022年9月26日
    1.3K00
  • 如何进行越南APT攻击样本的深度分析

    一、前言 APT已经成为了安全领域热门的话题。 Eleven Paths旗下Innovación y laboratorio 4月发表《Docless Vietnam APT》报告: 上述信息表述,我们侦测到一些恶意邮件发送到属于越南政府的邮箱,这封越南语邮件的日期是2019年3月13号。这封邮件…

    2022年9月21日
    33200
  • windows deepin没有无线网络怎么解决

    解决方法: 方法一: 1、可以尝试先切换回windows系统,然后下载驱动人生。 2、然后在windows系统下更新自己的无线网卡驱动,更新后再切换回deepin系统看看能否显示。 方法二: 1、如果windows修复无效,那么回到deepin,打开“深度终端” 2、在其中输入“lspci | gr…

    2022年9月21日
    53200
  • jquery如何监听select的改变

    监听步骤:1、利用change()给select元素绑定改变事件,并设置事件处理函数,语法“$(“select”).change(function() {…});”;2、在事件处理函数中,设置事件触发后需要执行的代码,语法“alert(“选项已被改变&…

    2022年9月13日
    3.0K00
  • windows驱动精灵启动鼠标不动如何解决

    驱动精灵启动鼠标不动: 答:这是最新版的驱动精灵的bug。 这样的情况和电脑没有关系,是软件版本更新后造成的bug。 解决方法: 1、启动驱动精灵后,尝试拔出鼠标的USB接口,然后重新插入连接。 鼠标即可继续恢复正常使用。 2、强制重启电脑,重启时拔掉鼠标usb插口。 开机后再次插入连接即可。 驱动…

    2022年9月13日
    20600
  • 数据库mdf文件怎么还原

    数据库还原mdf文件的方法: 1、打开mssql2008 r2管理器。 2、右击“数据库—>附加”弹出附加操作窗体。 3、点击“添加”加入mdf文件。 4、如果只有mdf文件会显示log未找到。 5、选中log文件,点击“删除”删除log文件。 6、删除后点击“确定”附加数据库。 感谢各位的阅…

    2022年9月8日
    65500
  • SQLMAP插件tamper编写与使用的方法是什么

    一、SQLMAP插件tamper简介 我们在安装SQLMAP后,一般来说会有一个名为tamper的目录,在该目录下,有很多python脚本,这些python脚本,就是sqlmap的插件,tamper翻译成中文是过滤的意思,这些脚本,对sqlmap的payload进行一定的修改,将其中容易被拦截的关键…

    2022年8月27日
    54600
  • jquery怎么删除option

    具体步骤如下: 1.首先,新建一个html项目,并在项目中引入jquery; <script type=”text/javascript” src=”/static/jquery-2.1.4.min.js”></script> 2.引入jquery后,在项目中创建一个opti…

    2022年8月29日
    30000
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部