カレンダーを作る

calendarモジュールを使います。
calendar.calendarやcalendar.monthはテキストで整形して出力します。

import calendar
print calendar.month(2008, 1)
    January 2008
Mo Tu We Th Fr Sa Su
    1  2  3  4  5  6
 7  8  9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

もしHTMLやPDFなど自前で加工して出力したい場合、加工する元のデータとして日付を並べたリストが得られるmonthcalendarを使うのが便利です。

print calendar.monthcalendar(2008, 1)
[ [0, 1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12, 13],
 [14, 15, 16, 17, 18, 19, 20], [21, 22, 23, 24, 25,
 26, 27], [28, 29, 30, 31, 0, 0, 0] ]

デフォルトでは最左列が月曜になっています。最左列を日曜にしたい場合はsetfirstweekdayを使います。

calendar.setfirstweekday(calendar.SUNDAY)
print calendar.month(2008, 1)
print calendar.monthcalendar(2008, 1)
    January 2008
Su Mo Tu We Th Fr Sa
       1  2  3  4  5
 6  7  8  9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

[ [0, 0, 1, 2, 3, 4, 5], [6, 7, 8, 9, 10, 11, 12],
 [13, 14, 15, 16, 17, 18, 19], [20, 21, 22, 23, 24,
 25, 26], [27, 28, 29, 30, 31, 0, 0] ]

追記

Python 2.5からCalendar、TextCalendar、HTMLCalendar、LocaleTextCalendar、LocaleHTMLCalendarといったクラスが使えます。自前コードを書かなくてもシンプルなHTMLカレンダーが出力できます。
とりあえずテキスト版の月カレンダーをクラスで書いてみます。

import calendar
tc = calendar.TextCalendar(calendar.SUNDAY)
print tc.formatmonth(2008, 1)
c = calendar.Calendar(calendar.SUNDAY)
print c.monthdayscalendar(2008, 1)
    January 2008
Su Mo Tu We Th Fr Sa
       1  2  3  4  5
 6  7  8  9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

[ [0, 0, 1, 2, 3, 4, 5], [6, 7, 8, 9, 10, 11, 12],
 [13, 14, 15, 16, 17, 18, 19], [20, 21, 22, 23, 24,
 25, 26], [27, 28, 29, 30, 31, 0, 0] ]

LocaleHTMLCalendarで日本語の月カレンダーを出してみるとこんな感じになります。

## Windowsであれば「ja」で日本語ロケールを指定
## システムによって「ja_JP.UTF-8」などのロケール指定が使えます
c = calendar.LocaleHTMLCalendar(calendar.SUNDAY, locale='ja')
print c.formatmonth(2008, 1)
<table border="0" cellpadding="0" cellspacing="0" class="month">
<tr><th colspan="7" class="month">1月 2008</th></tr>
<tr><th class="sun">日</th><th class="mon">月</th><th class="tue">火</th><th class="wed">水</th><th class="thu">木</th><th class="fri">金</th><th class="sat">土</th></tr>
<tr><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="tue">1</td><td class="wed">2</td><td class="thu">3</td><td class="fri">4</td><td class="sat">5</td></tr>
<tr><td class="sun">6</td><td class="mon">7</td><td class="tue">8</td><td class="wed">9</td><td class="thu">10</td><td class="fri">11</td><td class="sat">12</td></tr>
<tr><td class="sun">13</td><td class="mon">14</td><td class="tue">15</td><td class="wed">16</td><td class="thu">17</td><td class="fri">18</td><td class="sat">19</td></tr>
<tr><td class="sun">20</td><td class="mon">21</td><td class="tue">22</td><td class="wed">23</td><td class="thu">24</td><td class="fri">25</td><td class="sat">26</td></tr>
<tr><td class="sun">27</td><td class="mon">28</td><td class="tue">29</td><td class="wed">30</td><td class="thu">31</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td></tr>
</table>