テキストファイルを読み込む

Python を使ってローカルに保存されているテキストファイルを開き、ファイルの内容を読み込む方法について解説します。ファイルの読み込みは全体をまとめて読み込む方法とファイルを1行毎に読み込む方法があります。

(Last modified: )

読み込み用にファイルを開く

テキストファイルを読み込むためにファイルを開く場合、 open 関数のモードとして "r" を指定して次のように実行します。

f = open('myfile.txt', 'r')

開こうとするファイルの文字エンコーディングが、ご自身の環境のデフォルトエンコーディングと異なる場合には、文字エンコーディングを指定します。

f = open('myfile.txt', 'r', encoding='UTF-8')

なお開こうとするファイルが存在しなかった場合 FileNotFoundError が発生します。

f = open('other.txt', 'r')
>> FileNotFoundError: [Errno 2] No such file or directory: 'other.txt'

ファイル全体を読み込む(readメソッド)

ファイルに含まれるテキストをすべて読み込む場合には read メソッドを使用します。

read(size=-1)

引数を指定しない場合、ファイルを EOF ( End Of File 、ファイルの終端)まで読み込み、文字列として返します。引数に最大文字数を指定した場合、指定した文字数分だけ読み込みます。

具体的には次のように記述します。

f = open('myfile.txt', 'r')

data = f.read()

f.close()

なお対象のファイルで使用されている文字エンコーディングと、 open 関数で指定した文字エンコーディングが異なっていると、 read メソッドを実行したときに UnicodeDecodeError が発生します。

f = open('myfile.txt', 'r', encoding='UTF-8')
data = f.read()
>> UnicodeDecodeError: 'utf-8' codec can't decode byte 0x96 in position 0: invalid start byte

サンプルコード

それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 sample2-1.py という名前で保存します。

f = open('myfile.txt', 'r', encoding='UTF-8')

data = f.read()
print(data)

f.close()

プログラムがある同じディレクトリに myfile.txt というファイルを作成し、次のようにテキストを入力しておきました。エンコーディングは UTF-8 で保存しました。

明日の天気はどうだろう。
晴れたらいいな。
雨じゃなかったら公園に行こう。

その後で、次のように実行してください。

python sample2-1.py

ファイル全体を読み込む(1)

ファイル myfile.txt を開き、ファイルの内容をすべて読み込んだ上で画面に出力しています。そのあとでファイルオブジェクトを閉じています。

ファイル全体を行単位で分割してリストとして取得する(readlinesメソッド)

先ほどと同じくファイル全体を読み込んだあとで、読み込んだデータを行単位で分割しリストの要素として追加したものを取得することができます。 readlines メソッドを使用します。

readlines(hint=-1)

ファイル全体を読み込み、行単位のデータを要素として追加したリストを返します。引数に最大文字数を指定した場合、指定した文字数分だけ読み込みます。

具体的には次のように記述します。

f = open('myfile.txt', 'r')

datalist = f.readlines()
print (datalist[0])
print (datalist[1])
print (datalist[2])

f.close()

リストとして取得したファイルのデータを順番に出力するには次のように記述します。

f = open('myfile.txt', 'r')

datalist = f.readlines()
for data in datalist:
  print(data)

f.close()

なおそれぞれの行のデータには改行文字が含まれます。 print 関数はデフォルトでは最後に自動で改行を行うようになっているためリストの要素をそのまま print 関数を使って出力すると改行を 2 回出力することになります。そこで print 関数で最後に改行を行わないようにするか、読み込んだデータの末尾から改行を取り除いてください。

print 関数で最後に改行を行わないようにする方法は「print関数を実行した時に改行しないようにする」を参照されてください。

f = open('myfile.txt', 'r')

datalist = f.readlines()
print (datalist[0], end='')

rstrip メソッドの使い方については「指定した文字を文字列の先頭および末尾から取り除く(stripメソッド)」を参照されてください。

f = open('myfile.txt', 'r')

datalist = f.readlines()
print (datalist[0].rstrip('\n'))

サンプルプログラム

それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 sample2-2.py という名前で保存します。

f = open('myfile.txt', 'r', encoding='UTF-8')

datalist = f.readlines()
for data in datalist:
  print(data, end='')

f.close()

プログラムがある同じディレクトリに myfile.txt というファイルを作成し、次のようにテキストを入力しておきました。エンコーディングは UTF-8 で保存しました。

明日の天気はどうだろう。
晴れたらいいな。
雨じゃなかったら公園に行こう。

その後で、次のように実行してください。

python sample2-2.py

ファイル全体を行単位で分割してリストとして取得する(1)

ファイル myfile.txt を開き、ファイルの内容をすべて読み込み行単位で分割してリストの要素として追加した上で、今度はリストから順に要素を取得して画面に出力しています。出力するときは改行が重ならないようにしています。そのあとでファイルオブジェクトを閉じています。

ファイルから行単位で読み込む(readlineメソッド)

ファイル全体ではなくファイルから 1 行ずつファイルの内容を読み込むには readline メソッドを使用します。

readline(size=-1)

改行または EOF までファイルを読み込み、文字列として返します。引数に最大文字数を指定した場合、指定した文字数分だけ読み込みます。ファイルの最後である EOF まで読み込むと空の文字列を返します。

具体的には次のように記述します。下記は 1 行分だけファイルを読み込んでいます。

f = open('myfile.txt', 'r')

data = f.readline()
print (data)

f.close()

ファイルの最後まで順番にファイルの内容を読み込んで処理するには、 while 文などを使って次のように記述します。

f = open('myfile.txt', 'r')

while True:
  data = f.readline()
  if data == '':
    break
  print (data)

f.close()

なお readlines メソッドの場合と同じく、それぞれの行のデータには改行文字が含まれます。 readlines メソッドの場合と同じように print 関数で最後に改行を行わないようにするか、読み込んだデータの末尾から改行を取り除いてください。

f = open('myfile.txt', 'r')

while True:
  data = f.readline()
  if data == '':
    break
  print (data.rstrip('\n'))

サンプルプログラム

それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 sample2-3.py という名前で保存します。

f = open('myfile.txt', 'r', encoding='UTF-8')

while True:
  data = f.readline()
  if data == '':
    break
  print (data.rstrip('\n'))

f.close()

プログラムがある同じディレクトリに myfile.txt というファイルを作成し、次のようにテキストを入力しておきました。エンコーディングは UTF-8 で保存しました。

明日の天気はどうだろう。
晴れたらいいな。
雨じゃなかったら公園に行こう。

その後で、次のように実行してください。

python sample2-3.py

ファイルから行単位で読み込む(readlineメソッド)(1)

ファイル myfile.txt を開き、ファイルの内容を 1 行単位で読み込んで画面に出力しています。出力するときは改行が重ならないようにしています。そのあとでファイルオブジェクトを閉じています。

ファイルから行単位で読み込む(for文)

for 文を使用するとファイルから 1 行ずつファイルの内容を読み込むことができます。次のように記述します。

f = open('myfile.txt', 'r')

for data in f:
  print(data)

f.close()

なお readlines メソッドの場合と同じく、それぞれの行のデータには改行文字が含まれます。 readlines メソッドの場合と同じように print 関数で最後に改行を行わないようにするか、読み込んだデータの末尾から改行を取り除いてください。

f = open('myfile.txt', 'r')

for data in f:
  print (data.rstrip('\n'))

サンプルプログラム

それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 sample2-4.py という名前で保存します。

f = open('myfile.txt', 'r', encoding='UTF-8')

for data in f:
  print (data.rstrip('\n'))

f.close()

プログラムがある同じディレクトリに myfile.txt というファイルを作成し、次のようにテキストを入力しておきました。エンコーディングは UTF-8 で保存しました。

明日の天気はどうだろう。
晴れたらいいな。
雨じゃなかったら公園に行こう。

その後で、次のように実行してください。

python sample2-4.py

ファイルから行単位で読み込む(for文)(1)

ファイル myfile.txt を開き、ファイルの内容を 1 行単位で読み込んで画面に出力しています。出力するときは改行が重ならないようにしています。そのあとでファイルオブジェクトを閉じています。

-- --

Python を使ってローカルに保存されているテキストファイルを開き、ファイルの内容を読み込む方法について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。