####目的:
月間カレンダーの作成です。
####背景:
システム手帳を使用していますが、リフィルのサイズ(82mmW x 140mmL)が特殊なため、入手困難で、価格もそこそこ高く、手作りしてしまおうと考えたのは過去のことですが、そのときにリフィル用紙を特注で作り、白紙が、まだ残っていましたので、来年分は、久しぶりに手作りしようと考えました。年に一度のことなので、手作りでも良いのですが、せっかくのプログラミング環境があるので、毎年、自動でカレンダーが出力できるような仕組みを作成してみようじゃあないか。という理由で、プログラミングしてみました。
####印刷:
ワープロソフトの「差し込み印刷」の機能を用います。従って、差し込み印刷用のカレンダーデータを作れば良い。「差し込み印刷」するテンプレートは、下図のような、見開きで1ヶ月表示となるテンプレートとしました。
####データ:
1ヶ月が1レコードになりますので、下図のようなカレンダーデータベースができれば、差し込み印刷に使用できます。この表を、python で作ろうというのが、今回の試みになります。
コードは、下記の通り
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" や、祝日が手入力とか、改善や機能追加は、いくつかあります。気が向いたら手をつけることにします。