Python holidays假期模块
在本教程中,我们将学习一个有趣的 Python 库,名为 holidays, 它可以确定特定日期的给定年份的假期。它返回给定日期的具体结果。我们只需要传递国家名称即可。然而,它只能检测固定的假期,如 圣诞节,新年节 等等。
安装
在终端中输入以下命令并按Enter键。
pip install holidays
导入 holidays 模块以检查是否安装。
HolidayBase() 方法
holidays 模块提供了 HolidayBase() 方法,用于检测特定日期的节假日。让我们看下面的语法。
语法 –
holidays.HolidayBase(years=[], expand=True, observed=True, prov=None, state=None)
参数 –
它接受以下参数。
- years- 这是一个整数的可迭代列表,指定应该预生成的假期对象。只有在设置为False时才可以使用该参数。
- expand- 它表示一个布尔值,表示是否在新年加入假期。默认为true。
- observed – 当我们将观察到的布尔值设置为True时,它将包括在周末放假的假日的观察日。
- Prov – 它是一个字符串值,指定具有唯一宪法假期的省份。默认是(Australia=’ACT’,Canada=’ON’,NewZealand=None)。
- state- 它代表有独特宪法假日的州。 (默认-美国=无)。
让我们理解以下示例 –
范例 –
from datetime import date
import holidays
# Select country
USA_holidays_list = holidays.US()
# printing all the holiday of USA year 2020
for p in holidays.US(years = 2020).items():
print(p)
输出:
(datetime.date(2020, 1, 1), "New Year's Day")
(datetime.date(2020, 1, 20), 'Martin Luther King Jr. Day')
(datetime.date(2020, 2, 17), "Washington's Birthday")
(datetime.date(2020, 5, 25), 'Memorial Day')
(datetime.date(2020, 7, 4), 'Independence Day')
(datetime.date(2020, 7, 3), 'Independence Day (Observed)')
(datetime.date(2020, 9, 7), 'Labor Day')
(datetime.date(2020, 10, 12), 'Columbus Day')
(datetime.date(2020, 11, 11), 'Veterans Day')
(datetime.date(2020, 11, 26), 'Thanksgiving')
(datetime.date(2020, 12, 25), 'Christmas Day')
示例2
from datetime import date
import holidays
# Select country
India_holidays_list = holidays.India()
# printing all the holiday of India year 2020
for p in holidays.India(years = 2020).items():
print(p)
输出:
(datetime.date(2021, 1, 14), 'Makar Sankranti / Pongal')
(datetime.date(2021, 1, 26), 'Republic Day')
(datetime.date(2021, 8, 15), 'Independence Day')
(datetime.date(2021, 10, 2), 'Gandhi Jayanti')
(datetime.date(2021, 5, 1), 'Labour Day')
(datetime.date(2021, 12, 25), 'Christmas')
注意 – 如我们在输出中所看到的,假期模块只返回固定日期的假期。
示例3:
from datetime import date
import holidays
# Select country
uk_holidays_list = holidays.UnitedKingdom()
# printing all the holiday of India year 2020
for p in holidays.UnitedKingdom(years = 2021).items():
print(p)
输出:
(datetime.date(2021, 1, 1), "New Year's Day")
(datetime.date(2021, 1, 2), 'New Year Holiday [Scotland]')
(datetime.date(2021, 1, 4), 'New Year Holiday [Scotland] (Observed)')
(datetime.date(2021, 3, 17), "St. Patrick's Day [Northern Ireland]")
(datetime.date(2021, 7, 12), 'Battle of the Boyne [Northern Ireland]')
(datetime.date(2021, 8, 2), 'Summer Bank Holiday [Scotland]')
(datetime.date(2021, 11, 30), "St. Andrew's Day [Scotland]")
(datetime.date(2021, 12, 25), 'Christmas Day')
(datetime.date(2021, 12, 27), 'Christmas Day (Observed)')
(datetime.date(2021, 4, 2), 'Good Friday')
(datetime.date(2021, 4, 5), 'Easter Monday [England, Wales, Northern Ireland]')
(datetime.date(2021, 5, 3), 'May Day')
(datetime.date(2021, 5, 31), 'Spring Bank Holiday')
(datetime.date(2021, 8, 30), 'Late Summer Bank Holiday [England, Wales, Northern Ireland]')
(datetime.date(2021, 12, 26), 'Boxing Day')
(datetime.date(2021, 12, 28), 'Boxing Day (Observed)')
我们可以获取所需国家的节假日列表。
如何检查给定日期是否是节假日
假设我们想要检查特定日期是否是节假日。我们可以按照以下步骤进行。
示例
from datetime import date
import holidays
# Select country
uk_holidays = holidays.UnitedKingdom()
date1 = '25-25-2021'
j = date1 in uk_holidays
# Cheking whether given data is a holiday
if j == True:
print("Yes: ")
print (uk_holidays.get(date1))
else:
print("No Holiday")
输出:
Yes:
Christmas Day
为印度添加自定义节假日
很多国家在下面的表格中都被漏掉了,但幸运的是我们可以为特定国家添加自定义节假日。在下面的示例中,我们将为印度添加自定义节假日。
示例
import holidays
add_holidays = holidays.HolidayBase()
print('28-03-2021' in add_holidays) # checking for holiday
# here we are adding Holiday without description
add_holidays.append('28-03-2021')
print('28-03-2021' in add_holidays) # True
# Add Holiday with description
add_holidays.append({'28-03-2021':'Holi: Festival of Colors, Holiday'})
print(add_holidays.get('28-03-2021'))
输出:
False
True
Holi: Festival of Colors, Holiday
说明:
在上面的代码中,首先导入了日期和假日模块。然后创建了 HolidayBase() 的对象,并检查给定的日期是否包含假日。它返回了false,所以我们添加了没有描述的自定义假日。
在另一个语句中,我们添加了一个带有描述的假日,并打印了结果。
假日库中可用的国家
以下是受假日库支持的国家。
国家 | 简称 | 省/州 |
---|---|---|
阿根廷 | AR | 无 |
澳大利亚 | AU | prov = ACT (默认), NSW, NT, QLD, SA, TAS, VIC, WA |
奥地利 | AT | prov = B, K, N, O, S, ST, T, V, W (默认) |
比利时 | BE | 无 |
加拿大 | CA | prov = AB, BC, MB, NB, NL, NS, NT, NU, ON (默认), PE, QC, SK, YU |
哥伦比亚 | CO | 无 |
捷克 | CZ | 无 |
丹麦 | DK | 无 |
英国 | 无 | |
欧洲中央银行 | ECB,TAR | 转欧洲自动实时大额清算(TARGET2) |
芬兰 | FI | 无 |
法国 | FRA | Métropole (默认),阿尔萨斯-洛林,瓜德罗普,圭亚那,马提尼克,马约特岛,新喀里多尼亚,留尼旺岛,法属波利尼西亚,圣巴泰勒米,圣马丁,瓦利斯和富图纳 |
德国 | DE | BW,BY,BE,BB,HB,HH,HE,MV,NI,NW,RP,SL,SN,ST,SH,TH |
匈牙利 | HU | 无 |
爱尔兰 | IE | |
马恩岛 | 无 | |
意大利 | IT | prov = MI, RM |
日本 | JP | 无 |
墨西哥 | MX | 无 |
荷兰 | NL | 无 |
新西兰 | NZ | prov = NTL, AUK, TKI, HKB, WGN, MBH, NSN, CAN, STC, WTL, OTA, STL, CIT |
北爱尔兰 | 无 | |
挪威 | NO | 无 |
波兰 | PL | 无 |
葡萄牙 | PT | 无 |
葡萄牙扩展 | PTE | 葡萄牙加上大部分人放假的延长假期 |
苏格兰 | 无 | |
斯洛文尼亚 | SI | 无 |
斯洛伐克 | SK | 无 |
南非 | ZA | 无 |
西班牙 | ES | 省份 = 安达卢西亚、阿拉贡、阿斯图利亚斯、加那利、卡斯蒂利亚-拉曼查、卡斯特利翁-拉曼查、加利西亚、伊维萨、伊卡-马略卡、马德里、穆尔西亚、纳瓦拉、巴伦西亚自治区、里奥哈 |
瑞典 | SE | 无 |
瑞士 | CH | prov = AG, AR, AI, BL, BS, BE, FR, GE, GL, GR, JU, LU, NE, NW, OW, SG, SH, SZ, SO, TG, TI, UR, VD, VS, ZG, ZH |
英国 | UK | None |
美国 | US | state = AL, AK, AS, AZ, AR, CA, CO, CT, DE, DC, FL, GA, GU, HI, ID, IL, IN, IA, KS, KY, LA, ME, MD, MH, MA, MI, FM, MN, MS, MO, MT, NE, NV, NH, NJ, NM, NY, NC, ND, MP, OH, OK, OR, PW, PA, PR, RI, SC, SD, TN, TX, UT, VT, VA, VI, WA, WV, WI, WY |
威尔士 | None |