Python教程-Python Holidays 模块

在本教程中,我们将学习一个有趣的 Python 库,名为 holidays,它可以确定特定日期的一年中的假期。它返回给定日期的具体结果。我们只需要传递国家名称。但是,它只能检测固定的假期,如 圣诞节、新年 等。
安装
在终端中输入以下命令并按回车键。
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 - 它是一个字符串值,指定具有独特宪法假期的省份。默认值为(澳大利亚='ACT',加拿大='ON',新西兰=None)。
- state - 它表示具有独特宪法假期的州。默认值为(美国=None)。
让我们了解以下示例 -
示例 -
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')
注意 - 如我们在输出中看到的,holidays 模块只返回固定日期的假期。
示例 - 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,因此我们添加了没有描述的自定义假期。
在另一条语句中,我们添加了带有描述的假期并打印了结果。
假期库中可用的国家
以下是 holidays 库支持的国家。
国家缩写 | 省/州 | |
---|---|---|
阿根廷 | 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(默认)、Alsace-Moselle、Guadeloupe、Guyane、Martinique、Mayotte、Nouvelle-Calédonie、La Réunion、Polynésie Française、Saint-Barthélémy、Saint-Martin、Wallis-et-Futuna |
德国 | 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 | prov = AND、ARG、AST、CAN、CAM、CAL、CAT、CVA、EXT、GAL、IBA、ICA、MAD、MUR、NAV、PVA、RIO |
瑞典 | 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 | 无 |
美国 | 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 |
威尔士 | 无 |