LoginSignup
1
0

More than 3 years have passed since last update.

Python による2021年の月カレンダー(システム手帳用リフィル)の自動作成

Last updated at Posted at 2020-09-21

目的:

月間カレンダーの作成です。

背景:

システム手帳を使用していますが、リフィルのサイズ(82mmW x 140mmL)が特殊なため、入手困難で、価格もそこそこ高く、手作りしてしまおうと考えたのは過去のことですが、そのときにリフィル用紙を特注で作り、白紙が、まだ残っていましたので、来年分は、久しぶりに手作りしようと考えました。年に一度のことなので、手作りでも良いのですが、せっかくのプログラミング環境があるので、毎年、自動でカレンダーが出力できるような仕組みを作成してみようじゃあないか。という理由で、プログラミングしてみました。

印刷:

ワープロソフトの「差し込み印刷」の機能を用います。従って、差し込み印刷用のカレンダーデータを作れば良い。「差し込み印刷」するテンプレートは、下図のような、見開きで1ヶ月表示となるテンプレートとしました。
calrendar_template.png

データ:

1ヶ月が1レコードになりますので、下図のようなカレンダーデータベースができれば、差し込み印刷に使用できます。この表を、python で作ろうというのが、今回の試みになります。
calrendar_db.png

コードは、下記の通り

monthly_calendar.py
import pandas as pd
import numpy as np
import calendar as cl
import os

"""
とりあえずの完成版
"""

file='f.csv'
fout=open(file,'w',encoding="utf_8")

# 作成する年
YEAR=2021

"""
while loop でデータを作成する
m--> month
D--> date
out --> ここにデータをためていく
"""

m=1
out=""
while m < 13:
  MR=cl.monthrange(YEAR,m)
  out=("{0},".format(cl.month_name[m]))

  D=0
  while D < 37:
    while D < MR[0]:
      out+=("*,")
      D+=1
    if D < MR[1]+MR[0]:
      out+=("{0},".format(str(D-MR[0]+1)))
      D+=1
    else:
      out+=("*,")
      D+=1
  out=out[:-1]
  out='{0}\n'.format(out)
  print(out)
  fout.write(out)
  m+=1

fout.close()

body_df=pd.read_csv('f.csv',index_col=0,
                    names=['D0','D1','D2','D3','D4','D5','D6','D7','D8','D9','D10',
                           'D11','D12','D13','D14','D15','D16','D17','D18','D19','D20',
                           'D21','D22','D23','D24','D25','D26','D27','D28','D29','D30',
                           'D31','D32','D33','D34','D35' ,'D36'])
print(body_df)

body_df.to_csv('f_out.csv')
os.remove('f.csv')

データベースの index 頭の "Month" や、祝日が手入力とか、改善や機能追加は、いくつかあります。気が向いたら手をつけることにします。

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0