批量生成markdown日报周报

批量生成markdown日报周报

生成整年的日报周报,不包含周六日及法定节假日

#***************************************************************************
#  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

(1)
打赏 微信扫一扫 微信扫一扫
xianya的头像xianya
上一篇 2023-05-07
下一篇 2023-06-04

相关推荐