欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實現(xiàn)自動化處理每月考勤缺卡數(shù)據

 更新時間:2022年06月27日 14:21:31   作者:阿黎逸陽  
不管是上學還是上班都會統(tǒng)計考勤,有些學?;蚬緯γ吭氯笨ù螖?shù)過多(比如三次以上)的人員進行處罰。本文提供了Python自動處理考勤和日志缺失的方法,需要的可以參考一下

不管是上學還是上班都會統(tǒng)計考勤,有些學校或公司會對每月缺卡次數(shù)過多(比如三次以上)的人員進行處罰。

有些公司還規(guī)定對于基層員工要在工作日提交日志、管理人員要提交周報或月報,對于少提交的人員要進行處罰。

如果公司HR逐個對人員的日志或缺卡數(shù)據進行處理,將是一項耗時且無聊的工作。

本文提供了自動處理考勤和日志缺失的方法。

不用安裝Python,不用學Python語法,只要你會在電腦上新建文件夾,點擊文件就可以實現(xiàn)考勤和日志缺失名單的統(tǒng)計輸出。

接下來一起來看下實現(xiàn)步驟吧。

一、效果展示

1.實現(xiàn)效果

首先來看下實現(xiàn)效果。

大體實現(xiàn)步驟如下:

步驟1:在D盤中新建“每月缺卡數(shù)據處理“文件夾(已在代碼中固定死了,必須建該文件夾)。

步驟2:把處理考勤缺失的exe文件和原始數(shù)據文件放到step1新建的文件夾中。

步驟3:點擊exe文件,會自動出來csv結果文件,具體格式如下:

2.原始數(shù)據模板

原始數(shù)據文件需為”判斷是否提交日志2.xlsx“,本文使用的原始數(shù)據如下(表頭需按如下命名):

注:如需本文原始數(shù)據、和直接運行得到結果的exe文件,可點擊鏈接獲取 提取碼vb6x

其中填報人指學生或員工姓名,部門若為學生可以填某某班。

填報時間指日志填報時間,日期指日志實際日期。若為考勤打卡,兩個日期都填實際打卡的日期即可。

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

如果原始文件中想存放員工打卡的全年數(shù)據,但想統(tǒng)計其中某個月的缺卡數(shù)據。

只需把想統(tǒng)計的月份放在日期的第一行即可,代碼中已按日期第一行進行了同年月數(shù)據子框的篩選。

如需設置定時任務,把運行結果定時郵件發(fā)送給相關人員,可以私信我。

二、代碼詳解

對于部分了解Python的朋友來說,如果有個性化的需求,可以自己微調代碼實現(xiàn)需求。接下來詳細闡述實現(xiàn)上述功能的代碼。

1.導入庫

首先導入本文需要加載的庫,如果你有些庫還沒有安裝,導致運行代碼時報錯,可以在Anaconda Prompt中用pip方法安裝。

# -*- coding: UTF-8 -*-
'''
代碼用途 :處理缺卡數(shù)據
作者     :阿黎逸陽
博客     :  https://blog.csdn.net/qq_32532663/article/details/106176609
'''
import os
import calendar
import numpy as np
import pandas as pd
from datetime import datetime
from xlrd import xldate_as_tuple
from chinese_calendar import is_workday
from chinese_calendar import is_holiday
from chinese_calendar import get_holiday_detail

本文應用到了os、calendar、numpy、pandas、datetime、xlrd、chinese_calendar庫。

os庫可以設置文件讀取的位置。

calendar和chinese_calendar庫是日期處理庫。

numpy和pandas庫處理數(shù)據框。

xlrd和datetime庫處理時間。

2.定義時間處理函數(shù)

接著應用xlrd和datetime庫中的函數(shù)定義時間處理函數(shù),把時間戳或帶時分秒的時間轉換成只含年月日的時間。

def num_to_date(x):   
    '''
    日期處理函數(shù)
    把時間戳或帶時分秒的時間轉換成只含年月日的時間
    '''
    try:
        x1 = datetime(*xldate_as_tuple(x, 0)).strftime('%Y-%m-%d')
    except:
        x1 = datetime.date(x).strftime('%Y-%m-%d')
    return x1

定義成年月日統(tǒng)一時間的目的是為了方便后續(xù)代碼的運行。

3.讀取數(shù)據調整日期格式

接著讀取數(shù)據,應用第二小節(jié)定義的時間處理函數(shù)把填報時間和日期進行處理。

#讀取數(shù)據
os.chdir(r'D:\每月缺卡數(shù)據處理')
date = pd.read_excel('判斷是否提交日志2.xlsx', sheet_name='Sheet1')

#調整日期格式
date['填報時間'] = date['填報時間'].apply(num_to_date)
date['日期'] = date['日期'].apply(num_to_date)

原始部分數(shù)據如下:

調用時間處理函數(shù)得到的部分數(shù)據如下:

4.計算工作日天數(shù)

接著取出數(shù)據框日期列的第一個值,獲取要統(tǒng)計的年月信息。根據年月信息獲取該月工作日的天數(shù)。

#取出想看缺卡信息的年月
y_m1 = date['日期'][0][0:7] 

def sele_ym(x, y_m=y_m1):
    '''
    判斷數(shù)據框中的日期是否為某月
    '''
    if x.find(y_m)>=0:
        return True

#找出這一個月中的工作日,求出工作日的天數(shù)
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)    #工作日天數(shù)

把工作天數(shù)和員工本月的實際打卡或寫日志的天數(shù)進行對比,如果實際值小于理論值,說明員工缺卡或請假了。

由于大部分的員工都是正常打卡或寫日志的,這時人工再對缺卡員工進行排查已經極大地縮小了排查面。

如有特殊代碼需求,需要求助的,可以到公眾號中私信我。

5.獲取缺卡名單

最后調用函數(shù)獲取缺卡名單,主要是對每個填報日期和實際工作日期進行比對。

#定義獲取缺卡信息的函數(shù)
def stat_dail_short(date, y_m1, work_days):
    '''
    date:存儲日志的數(shù)據大表
    y_m1:月份
    work_days:該月的工作天數(shù)
    '''
    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') 
    
#調用函數(shù)獲取缺卡名單
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'}

結果中的數(shù)據是用填報人、填報部門、缺卡次數(shù)、具體的缺卡日期進行拼接展示的。會以csv的形式存放到指定文件夾中。

如果需要把姓名、部門、缺卡次數(shù)等信息分開,可以在excel中按特定條件分列,或調整一下代碼進行實現(xiàn)。

本文開頭的exe文件生成方法,可以參考下文

Pinstaller(Python打包為exe文件)

之前自己把 Python 文件打包成 exe 的時候,折騰了很久,本文將詳細地講述如何快速生成在不安裝 Python 的電腦上也能執(zhí)行的文件

1. 在 prompt 中運行 pip install pyinstaller , 安裝 pyinstaller 庫

2.  在 prompt 中運行 where pyinstaller 

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

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

C:\Users\Administrator\Anaconda3\Scripts 中 (我的路徑是這個,你就按照第二步的路徑)

4.  調用 cmd 窗口

把待打包文件放在

C:\Users\Administrator\Anaconda3 \Scripts 目錄下,在該文件夾中按shift+鼠標右鍵 , 點擊 在此處打開命令窗口 調用 cmd 

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

例子:打包 Python 繪制皮卡丘的視頻,在cmd中輸入 pyinstaller -F  pkq_1.py

即可生成普通圖標的exe可執(zhí)行文件。

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實現(xiàn)自動化處理每月考勤缺卡數(shù)據的文章就介紹到這了,更多相關Python處理考勤缺卡數(shù)據內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python算法深入理解風控中的KS原理

    python算法深入理解風控中的KS原理

    這篇文章主要為大家介紹了python算法深入理解風控中的KS原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2021-11-11
  • python讀取txt文件并取其某一列數(shù)據的示例

    python讀取txt文件并取其某一列數(shù)據的示例

    今天小編就為大家分享一篇python讀取txt文件并取其某一列數(shù)據的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • Python使用type關鍵字創(chuàng)建類步驟詳解

    Python使用type關鍵字創(chuàng)建類步驟詳解

    在本文里我們給讀者們整理了關于Python如何使用type關鍵字創(chuàng)建類的相關知識點,需要的朋友們參考學習下。
    2019-07-07
  • pyqt5 實現(xiàn)多窗口跳轉的方法

    pyqt5 實現(xiàn)多窗口跳轉的方法

    今天小編就為大家分享一篇pyqt5 實現(xiàn)多窗口跳轉的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • 超詳細Python解釋器新手安裝教程

    超詳細Python解釋器新手安裝教程

    這篇文章主要介紹了超詳細Python解釋器新手安裝教程,文中有非常詳細的圖文示例,對不會安裝python解釋器的小伙伴們很有幫助喲,需要的朋友可以參考下
    2021-05-05
  • Django rest framework工具包簡單用法示例

    Django rest framework工具包簡單用法示例

    這篇文章主要介紹了Django rest framework工具包簡單用法,結合匿名訪問控制的具體實例分析了Django rest framework工具包的注冊、路由設置、視圖、權限控制、配置等相關操作技巧,需要的朋友可以參考下
    2018-07-07
  • python搜索指定目錄的方法

    python搜索指定目錄的方法

    這篇文章主要介紹了python搜索指定目錄的方法,涉及Python操作目錄的相關技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • Python中的八大核心語句你知道幾個呢?

    Python中的八大核心語句你知道幾個呢?

    Python?是一種代表簡單思想的語言,其語法相對簡單,很容易上手。本文精心篩選了Python中的八大核心語句,快來看看你都掌握了幾個呢
    2023-02-02
  • python將天氣預報可視化

    python將天氣預報可視化

    大家好,本篇文章主要講的是python將天氣預報可視化,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • Python基礎之time庫詳解

    Python基礎之time庫詳解

    這篇文章主要介紹了Python基礎之time庫詳解,文中有非常詳細的代碼示例,對正在學習python基礎的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04

最新評論