【原创】python语言实现半自动排班系统

本文介绍了一个使用Python编写的半自动排班系统,该系统能识别不规范的报班时间,生成带工时的报班表,帮助制作排班表并导出表格。通过识别接龙文本中的时间格式,利用pandas处理数据,wxpython构建GUI,实现了从接龙文本到排班表的自动化转换。同时,文章也总结了开发过程中遇到的问题和经验教训。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python语言实现半自动排班系统

0. 为什么要做这个软件?

相信各位从事人事的dalao们,尤其是门店销售的店长们应该都经历过排班表的痛苦。在网上收集了文本的报班信息(比如说微信聊天)后将其整理为一张表可以说是一个机械重复又费时费力的工作。虽然说可以用共享文档等现有的解决方案,但根据我的了解(以及个人打工经历)大多数店铺采用的还是微信接龙的方式。因此,我设计了一个可以辅助店长们及人事dalao们排班的跨平台软件。

1. 本软件要实现哪些功能?

总目标:将接龙文本制作为排班表格
步骤:

  1. 识别接龙文本中格式多样的报班时间
  2. 汇总报班时间,自动得出报班表,并汇总出工时
  3. 用户对报班表进行修改,最终制作成排班表
  4. 导出表格

以上的功能需要使用的第三方依赖:pandas(整理数据),wxpython(GUI)

2. 具体功能实现

2.1 识别文本中的格式不一的时间表达方式

没有格式统一这样概念的一般员工们在接龙的时候所使用的报班格式是多种多样的,我在软件设计中看到的就包括但不限于:用小数点作分割符,只写一个月份(2.1-3),不按顺序(2.3 晚,2.1-2.2 通)等非常多让程序员们血压暴涨的格式= =,因此,我们如果要实现一个实用化的系统,第一步便是要做到把这些高血压的情况解决掉。

首先,我们收集报班的时候一般都是确定的时间段的,比如2.16-2.28,这个完全可以在UI中要求用户输入信息。所以我们首先可以通过pandas中的date_range方法实现。

def TimeTranser(StartTimeStr,EndTimeStr):
    DatetimeIndex = pd.date_range(StartTimeStr,EndTimeStr,freq='D')
    TidyedTimeBox = [DatetimeIndex[0],DatetimeIndex[-1]]
    for DateTime in DatetimeIndex:
        TidyedTime = "{}.{}".format(DateTime.month,DateTime.day)
        TidyedTimeBox.append(TidyedTime)
    return TidyedTimeBox

现在,我们已经获得了一个时间的“标准答案”TidyedTimeBox,有了判断标准后就是很简单的文本处理啦~

既然我们设定了这个排班助手软件的应用情景是微信接龙,那么就可以充分利用接龙文本的特征:接龙内容部分每行必定为数字加小数点加空格组成。那么我们就可以用这个性质来判定有效文本的开始位置,这里用FirstInt函数表示。

def FirstInt(line):
    LineMess = line.replace('\n','').split('. ')
    if((len(LineMess)) == 1):
        return False,114514
    else:
        number = int(LineMess[0])
        PersonalMesses = LineMess[1].split(' ')
        pre_dels = []
        for n,mess in enumerate(PersonalMesses):
            if(mess == ''):
                pre_dels.append(n)
        for i in pre_dels:
            del PersonalMesses[i]
        return True,number,PersonalMesses

识别完成之后自然就是要将人员的信息进行规范化处理(即将报班分类规整为每个单独的日期),这个步骤实际上是两步,首先分类(早班,晚班,通班等情况),其次规整。分类则以WorkTimeTranslate方法前半部分完成,规整则由TidyTimeStr方法实现:

    def WorkTimeTranslate(self):
        UsefulData = []
        for n in range(len(self.mess)):
            if(n == 0):
                name = self.mess[n]
            else:
                UsefulData.append(self.mess[n])
        AllPass = self.IsAllPass(UsefulData)
        if(AllPass
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值