【Python】ファイルの読み込み方まとめた【read,readline,readlines】

Programming

Pythonにはtxtファイルの読み込み方が3種類あります。
しかし違いがよくわからず頭がこんがらがってきたので、一旦みやすくまとめてみます。

read(), readline(),readlines()の違い

3つのメソッドの違いについて説明します。読み取り範囲、返り値が違いになります。

read()

ファイルをすベて読み取り、str型(文字列)にして返します。


f = open('sample.txt', encoding='utf-8')
data = f.read() #dataはstr型、ファイル内のすべての内容が入っている
f.close()

readline()

ファイルを1行だけ読み取り、str型(文字列)にして返します。


f = open('sample.txt', encoding='utf-8')
line = f.readline() #lineはstr型、1行分の内容が入っているので名前はlineにしておくと分かりやすい
f.close()

readlines()

ファイルをすべて読み取り、1行ずつlistに格納して返します。


f = open('sample.txt', encoding='utf-8')
lines = f.readlines() #linesはlist型、ファイル内のすべての内容が1行ずつ格納されているlistなので名前はlinesにしておくと分かりやすい
f.close()

ファイル内のすべてのデータに対して1行ずつ処理したい

多くの人はtxtファイルに対してはこのような操作をしたいはずです。
上にあげたメソッドごとにコードの書き方が異なるので、それぞれ書いていきます。

read()の場合


f = open('sample.txt', encoding='utf-8')
data = f.read() #dataはstr型、ファイル内のすべての内容が入っている
f.close()

#文字列を改行で区切る
lines = data.split('\n')
#for-in文で回して1行ずつ処理
for line in lines:
    pass #なんらかの処理

readline()の場合


f = open('sample.txt', encoding='utf-8')
line = f.readline() #lineはstr型、1行分の内容が入っているので名前はlineにしておくと分かりやすい
#while文で1行ずつ処理、最後の行に到達するまで処理とreadline()を繰り返す
while line:
    pass #なんらかの処理
        f.readline() #次の行を読み込み
f.close()

readlines()の場合


f = open('sample.txt', encoding='utf-8')
lines = f.readlines()  #linesはlist型、ファイル内のすべての内容が1行ずつ格納されているlistなので名前はlinesにしておくと分かりやすい
f.close()

#for-in文で回して1行ずつ処理
for line in lines:
    pass #なんらかの処理

readlineとreadlinesの使い分けに関してですが、膨大なデータ量のファイルを扱うときはreadlineメソッドで1行ずつ読み込む方が良いでしょう。readlines()メソッドですと巨大なファイルを一気に読み込んでしまいますので、メモリを圧迫しパフォーマンスを低下させる危険性があります。
比較的軽量なファイルの場合は、コードの量が少なくて済むreadlinesを使うといいでしょう。

ただ、実はPython3ではファイルオブジェクトはイテラブルなので、わざわざreadlinesメソッドを使わなくてもそのままfor-in文に使用できます。


f = open('sample.txt', encoding='utf-8') #fはイテレータなのでfor文が使える
f.close()

#for-in文で回して1行ずつ処理
for line in f:
    pass #なんらかの処理

readlinesメソッドを使う理由としては、やはりlist型として返してくれるのでsliceなどの便利な機能を使えることでしょう。

コメント

タイトルとURLをコピーしました