Python3

pythonで一年間の休日判定をしてみた


背景

python3で一年間の休日判定を行ってみた。

特定年度の休日をYYYY-MM-DD形式で出力する


手法

①内閣府のcsvデータをダウンロードして祝日の判定データとする。

②一年間の日付データを回す

③データの曜日判定(土日)をする

④①を使いデータの祝日判定をする

⑤年末年始など会社特有の休日判定をする


 コード

import datetime

import pandas
import urllib

public_holiday_csv_url="http://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv"
file_name = public_holiday_csv_url.split("/")[-1]

# 対象年度
target_year = 2018

# 会社特有の休日
company_holiday = ['2018-01-02','2018-01-03','2018-12-28','2018-12-31']

def get_holiday_flg(date):
# 通常の土日
if (date.weekday() >= 5):
return True

# 祝日
holidays_df = pandas.read_table(file_name, delimiter=',', encoding="SHIFT-JIS")
if date.strftime("%Y-%m-%d") in holidays_df['国民の祝日月日'].tolist():
return True

# 会社の休日
if date.strftime("%Y-%m-%d") in company_holiday:
return True

return False

if __name__ == '__main__':

# 内閣府から祝日データを取得、更新したいときにTrueにしてね
if True:
urllib.request.urlretrieve(public_holiday_csv_url, file_name)

# 年始から日付を回す
date = datetime.datetime(target_year, 1, 1, 0, 0)
while date.year == target_year:
if get_holiday_flg(date):
print(date.strftime("%Y-%m-%d"))
date += datetime.timedelta(days=1)

pip install pandas

でpandasをインストールしておく

改良の余地はありそうだけど、こんな感じで簡単にできた


2017/12/04追記


あ、振替休日考慮できてない


参考

参考にいたしました。ありがとうございます。

Pythonで営業日を取得

http://cartman0.hatenablog.com/entry/2017/05/25/195818