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!

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Python 入門