python生成签到表日期

为什么写这个脚本?

背景

    公司需要签到,没有什么指纹或者胸卡之类的自动化方式。每天早上在boss旁边的桌子上有纸质的表格

表格中有一个月的空行,早上来的时候在自己的名字下对应的日期上记上签到的时间。

引子

 不知为何,负责每月更新签到表的工作居然不是hr在做,而是每个工作小组的小组长来每月更新这张纸质表格,我们的小组长离职了。

现在你明白了,该我来更新这愚蠢的签到表。

正文

 我原本以为不过excel 表格而已,初中时帮家里记账也用过。但今天在 excel 表格中怎么也搞不出来这种格式的数据

12-01 星期五
12-02 星期六
12-03 星期日
12-04 星期一

从网上找了几个方法也都不能如愿。感觉颇为麻烦,于是祭出 python大法。三下五除二就写下了这么几行代码

import datetime
import calendar

skipWeekends = True
weekMaps = {0: "星期日", 1: "星期一", 2: "星期二", 3: "星期三", 4: "星期四", 5: "星期五", 6: "星期六"}


def generate_dates(start_month, start_week, end_day):
    start_day = 1

    days = []
    while start_day <= end_day:
        week = (start_week + start_day) % 7
        day_text = "%02d-%02d %s" % (start_month, start_day, weekMaps[week])

        if not (skipWeekends and week in [0, 6]):
            days.append(day_text)
        start_day += 1

    return days


def format_days_to_csv(days_list):
    fp = open("days.csv", 'w', encoding="gbk")

    for line in days_list:
        line += '\n'
        fp.write(line)

    fp.close()


def days_of_this_month(year, month):
    return calendar.monthrange(year, month)[1]


def main():
    now = datetime.datetime.now()
    start_week = now.weekday()
    start_month = now.month
    end_day = days_of_this_month(now.year, now.month)
    month_days = generate_dates(start_month, start_week, end_day)
    print("get to work for %d days in %d" % (len(month_days), start_month))
    format_days_to_csv(month_days)

if __name__ == '__main__':
    main()

代码运行之后,会生成本月份的签到表的日期一项

后记

    我知道用 excel 本身肯定也可以方便的做出效果,但是我不会,也不想把 excel 玩的那么溜

    同时我在想是否有必要在公司内部搭建一个 在线考勤的东西…

代码获取链接   

0 条评论
发表一条评论