$5 ファイルからの入力

5-1 ファイルからの入力

ここでは、ファイルからのデータ入力について解説します。
ファイルからの入力とは、ファイルに書いてある文字を読むことですけど、 普通は、全体を一度に読むか、一行づつ読み込むことになります。 ある部分だけ読み込むというのは、ちょっと難しいようです。

まずは、基本的なプログラムを作ってみましょう。

  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

ということで、出来ないことはないですけど、スマートではないですね。


Next: 5-2 タブ区切りデータから表をつくる

Previous: 4-2 簡単なパズルの解説

Contents


Foundation of CGI Page

春風はるか haruka@harukaze.net