Python ファイルの読み込み

Python

Pythonでテキストファイルを読み込む方法について説明します。

ファイルの読み込み

ファイルの読み込みには、open関数を利用します。
ここでは、夏目漱石の「こころ」の冒頭部分が保存されたテキストファイル「kokoro.txt」を読み込んで、表示する処理を示します。

文書全体をまとめて読み込む方法

f = open('kokoro.txt', 'r')
buffer = f.read() 
f.close() 

print(buffer)

出力結果

 私《わたくし》はその人を常に先生と呼んでいた。だからここでもただ先生と書くだけで本名は打ち明けない。これは世間を憚《はば》かる遠慮というよりも、その方が私にとって自然だからである。私はその人の記憶を呼び起すごとに、すぐ「先生」といいたくなる。筆を執《と》っても心持は同じ事である。よそよそしい頭文字《かしらもじ》などはとても使う気にならない。

まず、open関数で開きたいファイルのファイルオブジェクトを生成し、read関数ですべてを読み込んでいます。読み込んだ後は、close関数で、ファイルを閉じています。
この方法で、ファイルを利用する場合は、最後に必ずファイルを閉じる処理(close)が必要になります。

一行ずつ読み込む方法

f = open('kokoro.txt', 'r')
while True:
    buffer = f.readline()
    if buffer != '':
        print(buffer, end = '')
    else:
        break
f.close()

print(buffer)

表示結果は、上のread関数の場合と同じになります。
ファイルの終端判定は、空の文字列が返されたかどうかで行います。
ファイルの終端でない場合は、何らかの文字列や改行コードが返されます。
print関数にendオプションを指定しているのは、readlineで返された文字列に改行が含まれるためにprint関数が出力する改行との重複を避けるためです。指定していない場合、余計な改行が表示されてしまいます。(下の「行ごとにまとめて読み込む方法」の出力結果と合わせて確認してみてください。)

行ごとにまとめて読み込む方法

f = open('kokoro.txt', 'r')
buffer = f.readlines()
f.close()

print(buffer)

出力結果

['こころ\n', '夏目漱石\n', '\n', '\n', '\u3000私《わたくし》はその人を常に先生と呼んでいた。だからここでもただ先生と書くだけで本名は打ち明けない。これは世間を憚《はば》かる遠慮というよりも、その方が私にとって自然だからである。私はその人の記憶を呼び起すごとに、すぐ「先生」といいたくなる。筆を執《と》っても心持は同じ事である。よそよそしい頭文字《かしらもじ》などはとても使う気にならない。\n']

一行ずつ読み込んだ結果が、リストとして返されます。
各要素の末尾に改行コードが含まれていることがわかります。
「私」の前に表示されている”\u3000″は、全角スペースを表しています。

ファイルのクローズ処理をおまかせする方法

with文を利用することで、ファイルのクローズ処理を明示的に記述する必要がなくなります。
ファイルの閉じ忘れ防止に非常に便利です。
with文を使って、上と同じ処理を行うには、以下のように記述します。

with open('kokoro.txt', 'r') as f:
    buffer = f.read()

print(buffer)

出力結果

 私《わたくし》はその人を常に先生と呼んでいた。だからここでもただ先生と書くだけで本名は打ち明けない。これは世間を憚《はば》かる遠慮というよりも、その方が私にとって自然だからである。私はその人の記憶を呼び起すごとに、すぐ「先生」といいたくなる。筆を執《と》っても心持は同じ事である。よそよそしい頭文字《かしらもじ》などはとても使う気にならない。

with文は、直後の式を評価し、そこに定義された、前処理と後処理を合わせて実行してくれます。

open関数

open関数の定義

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

fileには、開きたいファイルのパスを指定します。

modeには、いくつかの値が指定できますが、テキストファイルの処理でよく使われるものは以下のとおりです。

rファイルを読み込みモードで開きます。
wファイルを書き込みモードで開きます。既にファイルが存在する場合は上書きされます。
aファイルを書き込みモードで開きます。既にファイルが存在する場合は追記されます。

encodingには、ファイルの文字コードを指定します。
デフォルトでは、utf-8として読み込まれます。
指定可能な値は、標準エンコーディングをご確認ください。

newlineには、None、”\r\n”、”\n”、”\r”のいずれかを指定します。
Noneが指定された場合、入力中の行は、”\n”、”\r”、”\r\n”のいずれかで終わり、呼び出し元に返されるときに、”\n”に変換されます。

コメント

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