文字列にテーブルタグをつけるPythonのプログラムを作ってみました。 | 在宅ネットでコツコツお金を稼ぐ

前々回は、Pythonのインストール、 前回はWindowsアプリの元となる簡単なプログラムをPythonで作る勉強をしました。 ここまではわりとスムーズに進んでいて、 Pythonは使い勝手がいいかもしれない、と思いました。

私はいろいろとホームページを作っていますが、 ちょっとデータを加工したい状況が出てきました。

データは

データ1,値

データ2,値

データ3,値

データ4,値

データ5,値

データ6,値

データ7,値

データ8,値

...

となっているもので、こちらをテーブルタグで挟んで、 テーブルとしてホームページに表示したい、というもの。 ひとつひとつコピー&ペーストをしてタグに挟んでも良いのですが、 少し面倒です。

ちょうどPythonを始めたばかりなので、Pythonでやってみよう、 と思い立ちました。

どんなプログラムにしようか

最初は、テキストボックスやテキストエリアを用意して、 そこにデータをコピー。実行ボタンを押すとタグが付けられた 文字列が表示されて、完了。

というプログラムを考えていましたが、 やはり、慣れないPythonとTkinterの組み合わせですと、思ったようにいきません。 エラーの山と格闘して、 結局は、テキストファイルにデータファイルを保存して、 それを読み込み、テーブルタグをつけて、別のテキストファイルに保存、 というやり方にすることにしました。 これで、とりあえず、目的の文字列にテーブルタグをつける、というのは できました。

作ってみたプログラム

作ってみたプログラムはこんな感じです。 おそらく、Pythonが得意な方から見ると、 「そんな書き方しないよ」「ちょっとおかしい」と思われると思いますが、 Python初心者ですので、その点はご了承ください。

プログラムを起動すると、data1.txtに書かれたデータを処理して、 data2.txtにテーブルタグをつけて保存する、というものです。


import tkinter

# Tkクラス生成
root = tkinter.Tk()
# 画面サイズ
root.geometry('300x200')
# 画面タイトル
root.title('文字列にタグをつけるツール')

lbl = tkinter.Label(text='文字列にタグをつけてテキストに保存しました!')#
lbl.place(x=30, y=5)

file_clear = open('data2.txt', 'w')#ファイルをいったんオープンしてクリア
file_clear.close()

file = open('data2.txt', 'a')
test_data = open("data.txt", "r")
for line in test_data:
 moji=line.split(','); #文字列を"データ","値"で分割する
 mojiretsu=''+moji[0] +''+ moji[1]+''+'\n'#文字列にテーブルタグをつける
 file.write(mojiretsu) #ファイルに書き込む。
test_data.close()
file.close()


root.mainloop()


上のプログラムで困ったのが、文字コードのエラー。 Windowsのメモ帳のUTF-8になっていると、うまくいきませんでした。 あらかじめ、data1、data2の両方のテキストファイルを作って、 「ANSI」に変えることで、エラーが回避できました。 文字コードを指定してファイルをオープンしたり、文字コードを指定して書き込んだり、 というのはphpやC#ですと、すぐにできますが、Pythonは 慣れてないので、よくわかりませんでした。

とりあえず完成したプログラムを実行すると、

<tr><td>データ1</td><td>値</td></tr>

<tr><td>データ2</td><td>値</td></tr>

...

という形でdata2.txtに保存されます。これをホームページに書くということになります。 データにテーブルタグをつける際のちょっとした入力の手間を省くプログラムでした。

最後に、 作っている途中で、出てきたエラーメッセージを今後の参考のために メモしておこうと思います。

UnicodeDecodeError: 'cp932' codec can't decode byte 0xef in position 691: illegal multibyte sequence

こちらが文字コードのエラーのようです。 あらかじめテキストファイルを作っておいて、 「ANSI」で保存しておくと、エラーがでなくなりました。 他の方法としては、おそらく文字コードを指定して、ファイルを作成すればいいと思うのですが・・・。

IndentationError: expected an indented block

Pythonで難しいと思ったのが、インデントです。 このエラーメッセージは ひとつスペースをあけたら回避できました。 for文のあとにスペースひとつ、if文のあとにもスペースがひとつ必要なのかな?

IndentationError: unexpected indent

このエラーは文字通りですが、 余計なインデントをするな、ということですのでインデントを一個削除すれば、OKでした。 慣れないとPythonのインデントは難しいですね。

AttributeError: 'str' object has no attribute 'sprit'

文字列を分割する時に、出てきたエラー。 よく見たら、痛恨のスペルミス。 正しくはsplitでした。私は、こういう凡ミスがよくあります。

IndexError: list index out of range

今回はdata.txtファイルを読み込んで一行ずつ処理しましたが、 空白行があると、その行をsplitしようとするので、 このエラーが出るみたいです。 phpですと、空白行は無視してというのが簡単にわかるのですが、 Pythonのやり方がよくわからなくて、うまくいきませんでした。 そこで、data.txtに空白の行を削除したら、エラーがでなくなりました。

ValueError: I/O operation on closed file.

このエラーはおそらく、ファイルが閉じられているのに、 何か処理しようとすると発生するエラーのようです。 よく見直して、ファイルクローズのインデントを削除したら直りました。

今回のまとめ

前回、前々回とスムーズに進みましたが、 いざ、実用的なものを作ろうと思うと、やはり エラーと格闘しないといけないようです。 一応は、今回やりたいことはPythonでできたので、 目標達成、ということにします。

ただ、Pythonの基本をしっかりと勉強した方がいいかもしれない、 と思いました。

AmazonでPythonの人気書籍を探す

Pythonの書籍で勉強してプログラミング力をアップさせたいところです。

(2019/12/28)

トップページ

その他のコラム

コンテンツ

トップページ