Python2行でカレンダー
今回は、Pythonで手軽に卓上カレンダーを作る方法を紹介する。Pythonのcalendarモジュールを利用すれば、手軽にカレンダーを出力できる。しかも、プログラムを二行書くだけだ。今回はPythonでいろいろなカレンダーを表示する方法を紹介しよう。
さっそく、カレンダーを表示する二行のプログラムを書いてみよう。Pythonに付属しているIDLEシェルを起動して、以下の二行を入力してみよう。
import calendar
print(calendar.month(2018, 1))
IDLEで実行すると、以下のようなカレンダーが表示される。
使い方だが、以下のような書式で記述する。
calendar.month(年, 月, w=列幅, l=行数)
キーワード引数のwやlを指定すると、カレンダーを出力するとき、各日ごとの出力幅を調整できる。以下は、w=7とl=2を指定する例だ。
print(calendar.month(2018, 1, w=7, l=2))
実行すると、以下のように表示される。
printすら省略できる
しかも、printでさえも省略して出力できるように、calendar.prmonth()関数が用意されている。引数は、month()関数と同じだ。
以下は、2018年1月の月間カレンダーを出力するプログラムだ。
calendar.prmonth(2018, 1, w=7)
IDLE上で試してみよう。とても簡潔にカレンダーを出力できる。
あまりにも簡単なので、ひょっとすると、普段からIDLEやターミナルでPythonを起動しっぱなしの達人たちは、カレンダーのアプリを立ち上げるよりも、このcalendar.prmonth()を実行した方が早いと思っているかもしれない(笑)。
ターミナルで出力すれば見栄えをカスタマイズできる
今度は、IDLEターミナル上でカレンダーを表示してみよう。以下は、レトロなターミナルとして人気の「cool-retro-term」を使ってカレンダーを表示してみたところだ。ターミナルを起動したら「python」コマンドを実行して、対話実行環境(REPL)を起動しよう。その上で、同じように、calendar.prmonth()関数を実行して、カレンダーを表示してみよう。
また、多くのターミナルでは、背景に画像を設定できるようになっている。そこで、ターミナルの背景に桜の写真画像を設定した上で、2018年4月のカレンダーを出力してみた。わずか2行のプログラムでも、やはり、画像と組み合わせるのは楽しいものだ。
Webブラウザに出力すればさらに見栄えよくできる
また、少しコードを書き加える必要があるが、Webブラウザにカレンダーを出力すれば、さらに見栄えの良さをカスタマイズできる。以下のプログラムを実行すると「calendar201801.html」というHTMLファイルを出力する。
# 月間カレンダーを作る --- (*1)
import calendar
lc = calendar.HTMLCalendar()
body = lc.formatmonth(2018, 1)
# ファイルに保存 --- (*2)
f = open("calendar201801.html", "wt")
f.write("<body>" + body + "</body>")
生成されたHTMLファイルをWebブラウザにドラッグ&ドロップすると、カレンダーが表示される。以下が、ブラウザに表示したところだ。
Google Chromeであれば、ブラウザを右クリックしてポップアップメニューから「検証」をクリックしてみよう。どんなHTMLの構造になっているのか確認できる。
プログラムも確認してみよう。calendarモジュールのHTMLCalendarを利用する。プログラムの(*1)の部分では、このオブジェクトを作成し、formatmonth()メソッドを呼びだすと、手軽にカレンダーをHTMLで生成できる。(*2)の部分では、生成したHTMLをファイルに保存する。ここでは、指定していないが、<style>
タグを書き加えると、デザインを細かくカスタマイズできる。
それでは、次に、以下のような年間カレンダーを作成してみよう。Webブラウザ向けにHTMLを出力すれば、カレンダーの閲覧も手軽である上に、印刷も簡単だ。
この年間カレンダーを作成するプログラムは、以下のようになる。
# 日本語のカレンダーを作る --- (*1)
import calendar
lc = calendar.HTMLCalendar()
body = lc.formatyear(2018, width=4)
# HTMLのヘッダとフッタを指定 --- (*2)
html = """<html><head><style>
table { padding: 8px; }
th { border-bottom: 1px solid gray; }
td { padding: 4px; vertical-align: top; }
.sun { color: red; }
.sat { color: blue; }
</style></head><body>""" + body + """
</body></html>"""
# ファイルに保存 --- (*3)
f = open("calendar2018.html", "wt")
f.write(html)
今回のメインプログラムが(*1)の部分となる。calendar.HTMLCalendar()を実行すると、HTMLを出力するローカル・カレンダーのオブジェクトを作成する。そして、formatyear()メソッドを使って、カレンダー向けのHTMLを出力する。そして、(*2)の部分では、ヘッダとフッタをつけて完全なHTMLを作る。そして、(*3)の部分で、HTMLをファイルに保存する。
ちなみに、(*2)の部分で<style>
タグを定義している。この部分を書き換えることで、カレンダーの色やサイズを変更することができる。
まとめ
以上、今回はcalendarモジュールを使って、カレンダーを作成する方法を紹介した。二行のプログラムを書くだけで、簡単なカレンダーを出力できるので便利だ。また、HTMLを出力する、HTMLCalendar を利用すれば、かなり自由度の高いカスタマイズが可能だ。手軽にカレンダーを出力できるので試してみて欲しい。
自由型プログラマー。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。代表作に、日本語プログラミング言語「なでしこ」 、テキスト音楽「サクラ」など。2001年オンラインソフト大賞入賞、2004年度未踏ユース スーパークリエータ認定、2010年 OSS貢献者章受賞。技術書も多く執筆している。