Python解析中国放假、调休安排

根据国务院办公厅关于xxxx年部分节假日安排的通知安排

1、修改target_year为指定年份

2、复制国务院放假安排内容到fetch_china_date方法中的textt中
在这里插入图片描述
3、运行main方法,运行效果
在这里插入图片描述

4、代码

import re
from datetime import datetime, timedelta

"""获取节假日的网址  https://www.gov.cn/zhengce/content/202411/content_6986382.htm"""

"""目标年"""
target_year = 2025

"""匹配放假日期"""
# 4月4日至6日放假 或则 1月28日至2月4日放假
holiday_pattern = re.compile(r'(\d{1,2}月\d{1,2}日(?:至(\d{1,2}月\d{1,2}日|\d{1,2}日))?)放假')

def extract_holidays(text):
    # 使用正则表达式匹配日期和放假信息
    holidays = holiday_pattern.findall(text)

    holiday_dates = []
    for date_str, end_date_str in holidays:
        if '至' in date_str:
            start_date_str, end_date_str = date_str.split('至')
            start_month, start_day = map(int, re.findall(r'\d{1,2}', start_date_str))
            end_month, end_day = (start_month, int(end_date_str.split('日')[0])) if '月' not in end_date_str else map(int, re.findall(r'\d{1,2}', end_date_str))
            date_range = [datetime(target_year, start_month, start_day) + timedelta(days=i) for i in range((datetime(target_year, end_month, end_day) - datetime(target_year, start_month, start_day)).days + 1)]
            for date in date_range:
                holiday_dates.append(date.strftime('%Y-%m-%d'))
        else:
            month, day = map(int, re.findall(r'\d{1,2}', date_str))
            holiday_dates.append(datetime(target_year, month, day).strftime('%Y-%m-%d'))
    return holiday_dates


def extract_working_days(text):
    """
    提取工作日期
    :param text: 国务院办公厅关于部分节假日安排的通知
    :return:
    """
    # 使用正则表达式匹配上班日期
    pattern = re.compile(r'。(\d{1,2}月\d{1,2}日(?:、\d{1,2}月\d{1,2}日)?上班)。')
    work_days_str = pattern.findall(text)

    work_day_list = []
    for work_day_str in work_days_str:
        work_data_replace = re.sub('上班', '', work_day_str)
        work_data_parts = re.split('、', work_data_replace)
        for part in work_data_parts:
            work_day_list.append(zh_time_format(part))
    return work_day_list


def zh_time_format(work_day):
    """
    # 根据输入的work_day(x月x日), 转换为"2023-11-11"
    :param work_day:
    :return:
    """
    datetime_obj = datetime.strptime(str(target_year) + "年" + work_day, '%Y年%m月%d日')
    return datetime_obj.strftime('%Y-%m-%d')


def remove_bracket(days):
    """
        移除"["和"]"
        days to string array
    """
    return str([str(date) for date in days]).replace('[', '').replace(']', '')


def fetch_china_date():
    """
        解析中国的节假日和调休日期
    """
    text = """
各省、自治区、直辖市人民政府,国务院各部委、各直属机构:

经国务院批准,现将2024年元旦、春节、清明节、劳动节、端午节、中秋节和国庆节放假调休日期的具体安排通知如下。

一、元旦:1月1日放假,与周末连休。

二、春节:2月10日至17日放假调休,共8天。2月4日(星期日)、2月18日(星期日)上班。鼓励各单位结合带薪年休假等制度落实,安排职工在除夕(2月9日)休息。

三、清明节:4月4日至6日放假调休,共3天。4月7日(星期日)上班。

四、劳动节:5月1日至5日放假调休,共5天。4月28日(星期日)、5月11日(星期六)上班。

五、端午节:6月10日放假,与周末连休。

六、中秋节:9月15日至17日放假调休,共3天。9月14日(星期六)上班。

七、国庆节:10月1日至7日放假调休,共7天。9月29日(星期日)、10月12日(星期六)上班。

节假日期间,各地区、各部门要妥善安排好值班和安全、保卫、疫情防控等工作,遇有重大突发事件,要按规定及时报告并妥善处置,确保人民群众祥和平安度过节日假期。
    """

    # 替换类似于"(周三)"字符串
    replace_target_str = re.sub(r'((.*?))', '', text)
    holidays = extract_holidays(replace_target_str)
    print("放假日期: " + ",".join(holidays))

    working_days = extract_working_days(replace_target_str)
    print("上班日期: " + ",".join(working_days))


if __name__ == "__main__":
    fetch_china_date()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值