在很多时候我们需要拍值班表,现在我遇到一个问题就是每一个周一到周五需要一个人值班,手动排序很麻烦,现在用程序实现这一功能,具体如下:
1 导入包
import datetime
import calendar
import math
import pandas as pd
from itertools import cycle
2 主要代码
start_date = datetime.date(2023,12,4) # 这里输入星期一
end_date = datetime.date(2026,1,1)
# 计算两个日期之间的周数
weeks_count = (end_date-start_date).days/7
weeks_count = math.ceil(weeks_count)
# 获取每个星期一和星期五的日期
dates = []
for week in range(weeks_count):
# 获取本周的星期一日期
week_start = start_date + datetime.timedelta(days=week * 7)
# print('week_start:',week_start)
week_end = week_start + datetime.timedelta(days=6)
# print('week_end:',week_end)
monday = week_start + datetime.timedelta(days=(week_start.weekday() + 1) % 7 + 6) # 这里必须是6 上面开始日期是星期一
# print('周一:',monday)
# 获取本周的星期五日期
friday = monday + datetime.timedelta(days=4)
# 将日期添加到列表中
dates.append((monday, friday))
3 日期和名单循环遍历
name_list = ['张三','李四','王五','周二','孙悟空','张无忌'] # 值班人员名单
# 创建DataFrame
df = pd.DataFrame(columns=['周一', '周五','name'])
# 循环遍历日期对列表,并将日期写入DataFrame
for date_pair,name in zip(dates,cycle(name_list)):
monday = date_pair[0]
friday = date_pair[1]
df = df.append({'周一': monday, '周五': friday,'name':name}, ignore_index=True)
下面是结果显示:
注:这个程序有一点小问题,后续优化之后再会更新的!!!