あらかじめ用意した次のようなテキストファイル(sample.txt)をPythonのプログラムから読み込む方法について説明します。
sample.txt
1 2 3 |
aaaaa bbbbb ccccc |
ファイルの読み込みや書き込みの手順
ファイルの読み書きは基本的に以下の手順で行います。
- ファイルを開く
- ファイルを読み込み(書き込み)、処理を行う
- ファイルを閉じる
以下ではまず、ファイルを扱うための準備としてopen()とclose()について説明します。次に、ファイルを読み込む方法として、for文による繰り返しを使った方法を説明した後、read(), readline(), readlines()を使ったファイル読み込み方法の違いについても説明します。
ファイルを読み込むための準備
ファイルの読み書きを行うためには、あらかじめファイルをプログラムから扱えるようにするためにファイルを開く処理の必要があります。このためにopen()を使います。また、開いているファイルを最後に閉じるためにclose()を使います。それぞれの書式は以下の通りです。open()は引数に指定したファイルをオブジェクトとして返す関数です。
1 |
open('fileのパス名', 'モード') |
1 |
オブジェクト名.close() |
モードにはr(読み込み)、w(書き込み)、a(追記)、r+(読み書き)があります。モードを省略した場合は、rと見なされます。
sample.txtをrモードで開き、変数fに代入した後ファイルを閉じる例は次のようになります。
1 2 |
f = open('sample.txt', 'r') f.close() |
これでプログラムからファイルを扱えるようになりました。
ファイルを読み込む
for文を使って読み込む
open()によって開いたファイルを読み込むためにはいくつかの方法があります。sample.txtを読み込み、その中身を表示することを考えてみましょう。まず、最も簡潔なfor文による繰り返しを使った例を見てみます。
1 2 3 4 |
f = open('sample.txt', 'r') for line in f: print line f.close() |
2行目でファイルの中身を改行を含めた行単位で変数lineに代入し、そのつど3行目でprint lineを実行します。このため、実行結果は以下のようになります。
実行結果
1 2 3 4 5 |
aaaaa bbbbb ccccc |
繰り返しを使った方法は簡潔ですが、より細かい処理を行うためにPythonではファイルを読み込むための関数が3つ用意されています。それぞれの関数は、open()によって返されるファイルオブジェクトのメソッドとして使うことができ、例えばf.read()のように記述します。
3つの関数の違いをまとめると次のようになります。
- read(size)は指定したsizeバイト分(引数を省略した場合はファイルの最後まで)読み込み、文字列を返します
- readline()はファイルを1行読み込み、文字列を返します
- readlines()はファイルを最後まで読み込み、行を要素としたリストを返します
引数を省略したread()やreadlines()はファイル全体を読み込むため、ファイルの容量が大きい場合には注意が必要です。それぞれの関数について見て行きましょう。
read()を使って読み込む
まず、read()について説明します。次のプログラムを見てみましょう。これは、上記の繰り返しを使った例と同様sample.txtの中身をそのまま表示するプログラムです。
1 2 3 4 |
f = open('sample.txt', 'r') str = f.read() print str f.close() |
実行結果
1 2 3 |
aaaaa bbbbb ccccc |
read(size)はファイルの中身を引数で指定したsizeバイト分まとめて読み込み、文字列として返します。sizeを省略した場合はファイルの最後まで読み込みます。上のプログラムでは、sample.txtを最後まで読み込み、改行文字を含めた文字列として変数strに代入します。その結果、print文でファイルの中身がそのまま出力されています。
readline()を使って読み込む
readline()はファイルの中身を一気に読み込むのではなく、1行ずつ読み込み、読み込んだ行を文字列として返します。次のプログラムを見てみましょう。変数lineには、sample.txtの1行目が文字列として代入されています。
1 2 3 4 |
f = open('sample.txt', 'r') line = readline() print line f.close() |
実行結果
1 |
aaaaa |
readline()は1行ずつ読み込むため、sample.txtの中身を全て表示するには例えば次のように繰り返しを使う必要があります。
1 2 3 4 5 6 |
f = open('sample.txt', 'r') line = f.readline() for i in line: print line, #,で改行の重複を防ぐ line = f.readline() f.close() |
readlines()を使って読み込む
readlines()はファイルの中身を最後まで読み込んだ後、1行を要素としたリストを返します。次のプログラムを見てみましょう。
1 2 3 4 |
f = open('sample.txt', 'r') list = f.readlines() print list f.close() |
実行結果
1 |
['aaaaa\n', 'bbbbb\n', 'ccccc\n'] |
次のプログラムでは、readlines()で読み込んだファイルを1行ずつfor文で表示しています。
1 2 3 4 5 |
f = open('sample.txt', 'r') list = f.readlines() for line in list: print line, # 「,」で改行の重複を防ぐ f.close() |
実行結果
1 2 3 |
aaaaa bbbbb ccccc |