python考勤系统,python做考勤表

  python考勤系统,python做考勤表

  不管是上学还是上班,出勤都会算,有些学校或者公司会一个月处罚缺卡太多次(比如三次以上)。本文提供了Python自动处理考勤和日志缺失的方法,有需要的可以参考。

  00-1010 1.效果展示1。效果实现2。原始数据模板2。详细代码解释1。导入数据库2。定义时间处理功能3。读取数据以调整日期格式4。计算工作天数。拿到失卡名单。无论上学还是工作,都会算出勤。有些学校或公司会对每月丢卡次数过多(比如三次以上)的人进行处罚。

  有的公司还规定,基层员工工作日要提交日志,经理要提交周报或月报,少提交的要处罚。

  如果公司HR逐个处理人员的日志或卡片缺失数据,将是一项耗时且枯燥的工作。

  本文提供了一种自动处理考勤和日志缺失的方法。

  不需要安装Python,也不需要学习Python语法。只要能在电脑上新建一个文件夹,点击文件,实现考勤和日志漏单的统计输出。

  接下来我们来看看实现步骤。

  

目录

  

一、效果展示

  我们先来看看实施效果。

  一般步骤如下:

  第一步:在D盘新建一个“月卡缺失数据处理”的文件夹(代码中已经修复了,所以必须建这个文件夹)。

  第二步:将exe文件和处理考勤的原始数据文件放入第一步新建的文件夹中。

  第三步:点击exe文件,csv结果文件会自动出现。具体格式如下:

  

1.实现效果

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

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

  填写人是指学生或员工的姓名。如果系里是学生,可以填某个班。

  填充时间是指日志的填充时间,日期是指日志的实际日期。如果您打卡出勤,您可以填写两个日期的实际打卡日期。

  如果您打卡出勤,今天完成的工作列可以留空。

  如果原文件想存储员工打卡的年度数据,但想统计某个月的缺卡数据。

  只要把你要计算的月份放在日期的第一行。同年的数据子帧已经根据代码中日期的第一行进行了筛选。

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

  

2.原始数据模板

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

  

二、代码详解

  首先,导入本文需要加载的库。如果您的一些库还没有安装,导致运行代码时出错,您可以使用pip方法在Anaconda提示符下安装它们。

  # -*-编码: UTF-8 -*-

  代码:处理卡缺失数据

  作者:阿里易阳

  博客: https://blog.csdn.net/qq_32532663/article/details/106176609

  导入操作系统

  导入日历

  将numpy作为np导入

  进口熊猫作为pd

  从日期时间导入日期时间

  从xlrd导入xldate_as_tuple

  从中国日历导入是工作日

  从中国日历导入是假日

  从中文日历导入获取假日详细信息

  本文应用于os、calendar、numpy、pandas、datetime、xlrd和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(rD:\每月缺卡数据处理)

  date = pd.read_excel(判断是否提交日志2.xlsx, sheet_name=Sheet1)

  #调整日期格式

  date[填报时间] = date[填报时间].apply(num_to_date)

  date[日期] = date[日期].apply(num_to_date)

  原始部分数据如下:

  

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

  

  

  

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

  

  2. 在 prompt 中运行 wherepyinstaller

  

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

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

  C:\Users\Administrator\Anaconda3\Scripts 中(我的路径是这个,你就按照第二步的路径)

  4. 调用 cmd 窗口

  把待打包文件放在

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

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

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

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

  6. 生成 exe 文件

  可以在路径

  C:\Users\Administrator\Anaconda3\Scripts 下的 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处理考勤缺卡数据内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: