【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 出力する集計表のイメージ

プログラムの概要

プログラムの処理手順の概要を次の 1. ~ 5. に示す。

  1. CSV ファイルを配列 CSVArray に読み込む
  2. <table> 開始タグ及び集計表のヘッダ行を出力する。
  3. 配列 CSVArray の先頭要素から末尾まで 1 件ずつ読み,配列 shitenArray に支店名と売上高を追加していく。途中で都道府県が変わった場合,支店名と売上高を追加する前に,① 都道府県,支店名,売上高,小計の HTML タグ及びデータを出力し,配列 shitenArray の全要素を削除する。
  4. ② 都道府県,支店名,売上高,小計の HTML タグ及びデータを出力する。
  5. 合計及び <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>

参考文献

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です