ここでは、ファイルからのデータ入力について解説します。
ファイルからの入力とは、ファイルに書いてある文字を読むことですけど、
普通は、全体を一度に読むか、一行づつ読み込むことになります。
ある部分だけ読み込むというのは、ちょっと難しいようです。
まずは、基本的なプログラムを作ってみましょう。
1: #! /usr/bin/python
2:
3: File = file('text', 'r')
4: Lines = File.readlines()
5: File.close()
6:
7: print "Content-type: text/html\n\n"
8:
9: for Line in Lines:
10: print Line
3行目で、「text」というファイルを「File」というオブジェクトとして開きます
(以前は「open」という関数を使ってましたが、現在の Pythonでは「file」という関数を使います)。
ここで、最後の「'r'」というのが「read(読み込み用)」として開く、という意味になります。
開いたファイルの内容は、4行目の「File.readlines()」というメソッドによって取り出されて、
各行が要素となる配列 Linesがつくられます。いいかえると、配列Linesの一つの要素が元のファイルの一行になります。
9行目で、ループを使って配列の各要素、つまり元のファイルの各行をprintします。
さて、今度は、ファイルから一行づつ読み込む例を作ってみましょう。
ファイルから一行読み込むのは「File.readline()」というメソッドを使います。
これをループの中で繰り返せばいいのですが、そのループを終了させるにはどうすればいいのでしょうか?
Perlの場合は「while(<File>)」という書き方で、ファイルの最後になったら自動的にループが終了するのですが、
Pythonには、そんな便利な機能はないみたいです。
本当は、「while(File.readline())」として、ファイルの最後になったらループは終了するのですが、
これでは、ループの中に「File.readline()」と書いても、while で評価された次の行になってしまいます。
「while(Line = File.readline())」という式ではエラーになります。
「Python入門」の5.6.2の例を参考にすると、
1: while 1: 2: Line = File.readline() 3: if not Line: 4: break 5: else: 6: print Line
ということで、出来ないことはないですけど、スマートではないですね。