Address
304 North Cardinal St.
Dorchester Center, MA 02124

Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM

WordpressとPython

Pythonでテキストファイルを読み込み、自動的にHTMLテーブル(表)を作る方法

テキストファイルの大量のデータから、自動的にHTMLテーブルタグを付与し表を作るPythonのプログラムについて

今回はPythonのプログラムを作りました。それは、PC内に保存されたテキストファイルを読み取って、自動的にHTMLのテーブル(表)を作るためのHTMLコードを出力するというプログラムです。

動機:面倒な作業

WordPressなどブログで表を作りたいことがあると思います。その場合表の項目に入るデータ数が少なければ手作業で問題ありませんが、これが千以上の項目となれば手作業で入力はやってられないでしょう。

もちろんエクセルやグーグルのスプレッドシートなど、表計算ソフトに最初からデータが入力されていれば、そのソフトでデータを選択してからコピー、その後、ワードプレスへ直接ペーストすれば終わりです。

ですが、そのような表計算ソフトで用意されていないデータの場合は面倒になります。そこで今回はテキストファイルに記録されたデータを読み込み、自動的にHTMLのテーブルタグを作成するPythonのプログラムを作りました。

私はこことは別のブログで、とあるジャンルのデータをその公式サイトのデータを使い、余計な情報は省いて綺麗に整形した後で表にして掲載しようと思いました。

しかし公式サイトでは表になっているものの、エクセルなどの形式でデータが用意されておらず、また、その表のデータをコピーして表計算ソフトにペーストすると期待する見た目にならなかったのです。

表計算ソフトの使い方はよくわかっておらず、その見た目を整形する方法も知りませんでした。かといって表計算ソフト上で1つ1つ項目を修正するのも面倒・・・

ならば、Pythonで作ってみるかとなったわけです。

完成したもの

完成したHTMLによるテーブル(表)の見た目は次のような感じになります。

PythonでHTMLテーブを作る方法
Pythonで、テキストファイルのデータからHTMLのテーブルタグを作るプログラム

この表で使用するデータは、次のようなテキストファイルのデータです。

1

たまご
だいこん
おでん
60
100
2

じゃがいも
たまねぎ
カレー
35
40
3

きゅうり
レタス
サラダ
50
200
4

豆腐
わかめ
味噌汁
60
100

このデータをWindowsのメモ帳か何かに保存していたとします。なおその際、文字コードはUTF-8(BOMあり)にしました。各行はしっかりと改行しています

上の画像で、テーブル内の各項目の背景色(白とグレー)が交互に登場していますが、これについては、過去記事「【CSS+HTML】プラグインを使わずにWordPressで表を作り、デザインを変えて縞々カラーにする方法。」をご覧ください。

Pythonのコードと解説

完成コード

作ったPythonのコードは次のようになります。「とりあえず動けばそれでいいや」という低レベルなコードですが、そこはご勘弁を。

コード解説

解説するほどのレベルのコードでもないのですが、一応書いておきます。

まず1行目で保存されているテキストファイルのパス(保存場所とファイル名)を変数urlに格納します。

2行目でopen( )関数を使ってファイルを読み込みモード(引数:r)で開いています。読み込むときのエンコードも引数で指定しています(引数:UTF-8)。

4行目では、readlines( )関数を使っています(readlineではないことに注意を。複数形の”s”があるかないかです)。この関数は、テキストファイルの中身を「1行ずつ」読み込み、「リスト」型のデータを作成してくれます。

5行目でリストの要素数をlen( )関数を使って手に入れます。今回のテキストファイルは全部で28行ありますから、リストの要素数は28となります。

6行目以下は、その要素数の情報を使ってfor文で繰り返し処理です。range(0,length)とすることで、「0~27」、つまり整数iの範囲は、0≦i≦27の28個の整数となります。28回の繰り返しですね。

Pythonで、テキストファイルのデータからHTMLのテーブルタグを作るプログラム

for文の中は、割り算の余りを求める演算子「%」を使っています。この画像のように、7つの項目で1つのかたまりとなっていますので、7で割ったあまりを求め、それによって出力すべきHTMLタグの内容を分けています。

空白行は何もせず「空白のまま」出力という感じにしています。HTMLタグさえつけなければ、HTML上は無視されるので、空白のまま出力すれば問題ありません。特別な工夫するのもめんどくさかったのでこうしました。結局は有効なHTMLタグさえ出力できればそれでいいので。

本来ならば「i%7」(余り)が2~5の場合は同じ処理なので、if~else・・・構文などを使ってもっと簡潔にかけるのですが、とりあえずわかりやすいので下手くそなコードのままにしています。

最後の行は開いたファイルを閉じるコードです。「開いたら閉じる」。ファイルを開くときは必ず閉じるという工程が必要です(書き方は他にもあります)。

さて、このPythonプログラムを実行すると、次のようなHTMLコードが出力されます。

<td>たまご
</td>
<td>だいこん
</td>
<td>おでん
</td>
<td>60
</td>
<td>100
</td></tr>
<tr><td>2
</td>


<td>じゃがいも
</td>
<td>たまねぎ
</td>
<td>カレー
</td>
<td>35
</td>
<td>40
</td></tr>
<tr><td>3
</td>


<td>きゅうり
</td>
<td>レタス
</td>
<td>サラダ
</td>
<td>50
</td>
<td>200
</td></tr>
<tr><td>4
</td>


<td>豆腐
</td>
<td>わかめ
</td>
<td>味噌汁
</td>
<td>60
</td>
<td>100
</td></tr>

あとはこれを、HTMLテーブルタグのパーツとして使えば表が完成です。

今回は、たかだが28行程度しかないテキストファイルでしたが、これが1000行とかになると手作業でHTMLにしていくのは苦行でしかないでしょう。

今回のPythonコードを参考にし、いろいろ変更を加えてぜひみなさんもPythonで面倒な作業の自動化を楽しんでください。

愛を分かち合いましょう