生成整年的日报周报,不包含周六日及法定节假日
#***************************************************************************
# Copyright (C) 2022 zhaodingmao
#
# @brief WorkSpace
# @author Dingmao Zhao
# @date 2023/1/30
# @version v1.0.0
#
#***************************************************************************
#!/usr/bin/env python3
# _*_ coding: utf-8 _*_
import os.path
import arrow
import time
from datetime import datetime, date
from chinese_calendar import is_holiday
from chinese_calendar import is_workday
class WorkSpace(object):
def __init__(self):
# 获取当前年份
year = time.strftime('%Y', time.localtime(time.time()))
# 创建一年的所有日期的目录
path_list = GetWorkLogsOfTheYear(year)
def CreateDir(DirName):
# 判断该目录是否存在
isExists=os.path.exists(DirName)
if not isExists:
os.makedirs(DirName)
print(DirName + " 目录创建成功")
else:
# 如果目录存在则不创建,并提示目录已存在
print(DirName + " 目录已存在")
def CreateMarkDown(MDName):
fileName = MDName + '.md'
file = open(fileName, 'w')
file.close()
def isLeapYear(years):
# 断言:年份不为整数时,抛出异常。
assert isinstance(years, int), "请输入整数年,如 2022"
# 总天数定义
days_sum = 0
# 判断是否是闰年
if ((years % 4 == 0 and years % 100 != 0) or (years % 400 == 0)):
# 闰年
days_sum = 366
else:
days_sum = 365
return days_sum
def get_holiday(year):
list_holiday=[]
year=int(year)
for month in range(1,13):
for day in range(1,32):
try:
dt=date(year,month,day)
except:
break
if is_holiday(dt):
list_holiday.append('{}-{:02d}-{:02d}'.format(year,month,day))
print(dt)
return list_holiday
def GetWorkLogsOfTheYear(years):
# 起始日期
start_date = '%s-1-1' % years
# 总天数
days_sum = isLeapYear(int(years))
# 路径列表
path_list = []
# 根路径
root = "./" + years
# 创建目录
CreateDir(root)
#当前日
i = 0
#当前周
week_num = 1
#记录周
temp_week = 0
while i < days_sum:
#格式化日期格式
markdownfile = arrow.get(start_date).shift(days=i).format("YYYY-MM-DD")
#当天是星期几
week = datetime.strptime(markdownfile, "%Y-%m-%d").weekday()+1
#文件路径
path = root + "/" + markdownfile
#今天
dt=arrow.get(start_date).shift(days=i).date()
#明天
dt_next=arrow.get(start_date).shift(days=(i+1)).date()
# 创建MarkDown工作日志
if is_workday(dt):
CreateMarkDown(path)
#创建MarkDown周报
workmd = root + "/" + markdownfile + "-第" + str(week_num) +"周周报"
#在法定假日的前一天创建当周的工作周报
if is_workday(dt) and is_holiday(dt_next):
if week_num != temp_week:
CreateMarkDown(workmd)
temp_week = week_num
#记录当前周数
if week == 1:
week_num+=1
# 记录目录
path_list.append(path)
i += 1
return path_list
if __name__ == '__main__':
workspace = WorkSpace()
安装依赖
pip install arrow #它提供了一种创建、操作、格式化和转换日期、时间和时间戳的合理且人性化的方法
pip install datetime #日期转换
pip install chinese_calendar #提供法定假日和工作日判断
原创文章,作者:xianya,如若转载,请注明出处:https://xianya.art/?p=85