背景
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