画像提供:マイナビニュース

写真拡大

○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 + "")

生成されたHTMLファイルをWebブラウザにドラッグ&ドロップすると、カレンダーが表示される。以下が、ブラウザに表示したところだ。

Google Chromeであれば、ブラウザを右クリックしてポップアップメニューから「検証」をクリックしてみよう。どんなHTMLの構造になっているのか確認できる。

プログラムも確認してみよう。calendarモジュールのHTMLCalendarを利用する。プログラムの(*1)の部分では、このオブジェクトを作成し、formatmonth()メソッドを呼びだすと、手軽にカレンダーをHTMLで生成できる。(*2)の部分では、生成したHTMLをファイルに保存する。ここでは、指定していないが、""" + body + """

"""

# ファイルに保存 --- (*3)

f = open("calendar2018.html", "wt")

f.write(html)

今回のメインプログラムが(*1)の部分となる。calendar.HTMLCalendar()を実行すると、HTMLを出力するローカル・カレンダーのオブジェクトを作成する。そして、formatyear()メソッドを使って、カレンダー向けのHTMLを出力する。そして、(*2)の部分では、ヘッダとフッタをつけて完全なHTMLを作る。そして、(*3)の部分で、HTMLをファイルに保存する。

ちなみに、(*2)の部分で