【Python】集計表を HTML に変換して出力するプログラム
平成23年度 春期 応用情報技術者試験 午後問題 問2 に出題された「集計表を HTML に変換して出力するプログラム」を Python で作成した。
問題文
図 1 に示すような,都道府県及び支店ごとに整理された売上高一覧の CSV ファイルを入力し,表 1 のような都道府県ごとの売上高の集計表を HTML で出力するプログラムがある。ここで,一つの都道府県における支店数は 500 未満とする。
東京都,千代田店,23500
東京都,中央店,33500
東京都,港店,18500
埼玉県,川口店,28000
埼玉県,さいたま店,9500
都道府県 | 支店名 | 売上高 |
---|---|---|
東京都 | 千代田店 | 23,500 |
中央店 | 33,500 | |
港店 | 18,500 | |
[小計] | 75,500 | |
埼玉県 | 川口店 | 28,000 |
さいたま店 | 9,500 | |
[小計] | 37,500 | |
合計 | 113,000 |
プログラムの概要
プログラムの処理手順の概要を次の 1. ~ 5. に示す。
- CSV ファイルを配列 CSVArray に読み込む
- <table> 開始タグ及び集計表のヘッダ行を出力する。
- 配列 CSVArray の先頭要素から末尾まで 1 件ずつ読み,配列 shitenArray に支店名と売上高を追加していく。途中で都道府県が変わった場合,支店名と売上高を追加する前に,① 都道府県,支店名,売上高,小計の HTML タグ及びデータを出力し,配列 shitenArray の全要素を削除する。
- ② 都道府県,支店名,売上高,小計の HTML タグ及びデータを出力する。
- 合計及び <table> の終了タグを出力する。
集計表を HTML に変換して出力するプログラム
Python で作成した集計表を HTML に変換して出力するプログラムを示す。
import csv
filename="uriage.csv"
with open(filename,encoding="utf-8-sig",newline='') as f:
csvreader=csv.reader(f)
CSVarray=[row for row in csvreader]
LineData={'todofuken':'都道府県', 'shiten':'支店', 'uriage':'売上'}
uriageSum=0
theader='''<table>
<tr>
<th>{todofuken}</th>
<th>{shiten}</th>
<th>{uriage}</th>
</tr>'''.format(todofuken=LineData['todofuken'],shiten=LineData['shiten'],uriage=LineData['uriage'])
tbody=''
for i in range(len(CSVarray)):
uriageSum=uriageSum + int(CSVarray[i][2])
tbody=tbody+'''
<tr>
<td>{todofuken}</td>
<td>{shiten}</td>
<td>{uriage}</td>
</tr>
'''.format(todofuken=CSVarray[i][0],shiten=CSVarray[i][1],uriage=CSVarray[i][2])
tfooter=''' <tr>
<td colspan="2">合計</td>
<td>{uriageSum}</td>
</tr>
</table>'''.format(uriageSum=uriageSum)
print(theader+tbody+tfooter)
上記のプログラムを実行した結果を以下に示す。
<table>
<tr>
<th>都道府県</th>
<th>支店</th>
<th>売上</th>
</tr>
<tr>
<td>東京都</td>
<td>千代田店</td>
<td>23500</td>
</tr>
<tr>
<td>東京都</td>
<td>中央店</td>
<td>33500</td>
</tr>
<tr>
<td>東京都</td>
<td>港店</td>
<td>18500</td>
</tr>
<tr>
<td>埼玉県</td>
<td>川口店</td>
<td>28000</td>
</tr>
<tr>
<td>埼玉県</td>
<td>さいたま店</td>
<td>9500</td>
</tr>
<tr>
<td colspan="2">合計</td>
<td>113000</td>
</tr>
</table>
参考文献
- 目指せ!応用情報技術者,「午後問題対策 プログラミング」