Python でファイルの読み込み
ここでは Python 2.7 を用いて、テキストファイルからデータを読み込み、print 文で出力する方法を説明します。
ファイルを開くのは、Python のビルトイン関数である open 関数を使います。
open 関数は成功するとファイルオブジェクトを返します。
open で取得したファイルオブジェクトが不要になったら close メソッドでファイルを閉じます。
早速、簡単なテキストファイルを読み込み、それを出力することを試してみましょう。
次のファイルを hello.txt として用意します。
Hello, world!
さて、file1.py は次の通りとします。
f = open('hello.txt', 'r')
print f.readline()
f.close()
この実行結果は次のようになります。
>C:\python27\python file1.py Hello, world!
ファイルを確実に閉じるために
一般的に「ファイルを閉じる」というのは、プログラムの安定稼動のために大切なポイントです。何かの拍子で close が呼ばれないという状況は極力避けなければなりません。
そのためファイルを閉じる部分については、実は Python 2.5 以降では次のように with ブロックを用いて次のようにかけます。
with open('hello.txt', 'r') as f:
print f.readline()
これによってブロックを抜けたときに close が呼ばれます。
これはファイルオブジェクトがコンテキストマネージャを実装しているためです。コンテキストマネージャーについては「コンテキストマネージャと with ブロック」をみてください。
Python 2.5 より前の環境では try-finally を利用して、次のようにします。
f = open('hello.txt', 'r')
try:
print f.readline()
finally:
f.close()
複数行を読み込み、書き出す
さて、複数行にして動作確認を続けてみましょう。
hello.txt を次のように、3行にしてみます。
Hello, world! This is line 2 :-) Good bye!
file1.py を次のように書き換えます。
with open('hello.txt', 'r') as f:
print f.readline(),
print f.readline(),
print f.readline(),
この結果は次のようになるはずです。
> C:\python27\python file1.py Hello, world! This is line 2 :-) Good bye!
readline を行数分だけ繰り返して書くのはあまりスマートな方法ではありませんから、「終わりまで読む」というコードに直しましょう。 これは for を使って次のように書けます。
with open('hello.txt', 'r') as f:
for line in f:
print line,
Hello, world! This is line 2 :-) Good bye!
print 文の最後のカンマ (,) を忘れると、一行余計に空いた結果になりますので気をつけてください。
これを少し発展させて、行番号を入れ込むと次の通り。
with open('hello.txt', 'rb') as f:
count = 0
for line in f:
count += 1
print "%d: %s" % (count, line),
この結果は次のようになります。
1: Hello, world! 2: This is line 2 :-) 3: Good bye!