文法・環境 標準ライブラリ・モジュール

【python】テキストファイルの読み込み、開き方【read、readline、readlines、linecache、pathlib】

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

with文など、ファイルを読み込む際に便利な構文についてもサンプルコードを交えながら紹介します。

本記事では、以下の内容を紹介しています。
テキストファイルを読み込む際に使用する各メソッド、モジュールの動作の違いについても紹介しています。

この記事で分かること

  • with文の使い方
  • readメソッド:テキストファイルの内容をすべて読み込み
  • readlinesメソッド:テキストファイルを行ごと読み込みリストで取得
  • readlineメソッド:テキストファイルを1行分だけ読み込み
  • linecacheモジュール:テキストファイルを行指定して読み込み
  • pathlibモジュールを用いてテキストファイルを読み込む方法

なお、本記事のサンプルコードには、下記のデータが記載されたテキストファイルを使用しています。

サンプルファイル

スポンサーリンク

with文の使い方

はじめに、ファイルを読み込むときに便利な、with文について紹介します。

with文を用いることで、特定の処理を行う際に必要となる、開始時・終了時の処理を実行することができます

この特定の処理がファイル操作である場合は、ファイル操作終了後に自動的にファイルを閉じることができます

「ファイル使用後に、ファイルを閉じる」というのは当たり前に感じますが、エラーを避けるために忘れてはいけない操作で、
pythonの公式ドキュメントにも、注意喚起する下記の記述があります。

with キーワードを使用しない場合は、ファイルを閉じ、このファイルのために利用されたシステムのリソースを直ちに解放するために f.close() を呼び出してください。

警告 f.write() を with キーワードや f.close() を使わずに呼び出した場合、プログラムが正常に終了した場合でも、 f.write() の実引数がディスクに完全に 書き込まれないことがあります 。

python公式ドキュメント

with文の使用方法を紹介する前に、with文を使用しない場合のファイル操作の例を紹介します。

with文を使用しない場合のファイル操作

with文を使用しない場合の、ファイル操作のサンプルコードを紹介します。

サンプルコードでは、try文を用いて、ファイル操作の最後に必ずファイルを閉じる処理を入れています

### with文を使用しない場合のファイル操作
import os

dir_path = r'C:\ *--- 任意のディレクトリ ---* '
file_name = 'file1.txt'

file_path = os.path.join(dir_path, file_name)

f = open(file_path)
try:
    data = f.read()
finally :
    f.close()

print(data)
"""
Apple 150
Banana 200
Orange 100
Grape 500
Lemon 100
"""

なお、try文を用いた例外処理については、下記の記事で紹介しています。

例外処理の基本【try文】

with文を使用した場合のファイル操作

次に、with文を使用した場合の、ファイル操作について紹介します。

with文は、"ファイルパス"、読み書きなどの "モード"、"エンコーディング" を引数にとります。
"モード"、"エンコーディング"は、省略可能です。

with文の書き方

with open( ファイルパス, モード, エンコーディング ) as 変数名 :
処理

具体的には、下記のような記述になります。

with open( ファイルパス, 'r', encoding='UTF-8' ) as 変数名 :

以下、with文を使用した場合のファイル操作のサンプルコードです。

### with文を使用した場合のファイル操作
import os

dir_path = r'C: *--- 任意のディレクトリ ---* '
file_name = 'file1.txt'

file_path = os.path.join(dir_path, file_name)

with open(file_path) as f :
    data = f.read()

print(data)
"""
Apple 150
Banana 200
Orange 100
Grape 500
Lemon 100
"""

with文を用いることで、ファイル操作部分がすっきり記述できていることが分かるかと思います。

また、with文を用いることで使用後のファイルを自動的に閉じてくれるため、エラーを防ぐこともできます。

スポンサーリンク

テキストファイルの読み込み・開き方

では、ここから本題のテキストファイルの読み込み方法について紹介します。

テキストファイルの読み込み方法には、下記のとおり、いくつか方法がありますので、それぞれについてサンプルコードを交えながら紹介します。

  • readメソッド:テキストファイルの内容をすべて読み込み
  • readlinesメソッド:テキストファイルを行ごと読み込みリストで取得
  • readlineメソッド:テキストファイルを1行分だけ読み込み
  • linecacheモジュール:テキストファイルを行指定して読み込み
  • pathlibモジュールを用いてテキストファイルを読み込む方法

readメソッド:テキストファイルの内容をすべて読み込み

ファイルオブジェクトのreadメソッドを用いることで、テキストファイルからすべてのコンテンツを一度に読み込むことができます。

readメソッドは、ファイルを終端まで読み込み、文字列として返します。

以下、readメソッドを用いて、テキストファイルを読み込むサンプルコードです。

### readメソッド:テキストファイルの内容をすべて読み込み
import os

dir_path = r'C:\ *--- 任意のディレクトリ ---*'
file_name = 'file1.txt'

file_path = os.path.join(dir_path, file_name)

with open(file_path) as f :
    data = f.read()

print(data)
"""
Apple 150
Banana 200
Orange 100
Grape 500
Lemon 100
"""

readlinesメソッド:テキストファイルを行ごと読み込みリストで取得

ファイルオブジェクトのreadlinesメソッドを用いることで、テキストファイルから行ごとにデータを読み込むことができます

readlinesメソッドの返り値は、リストの形で取得できます。

以下、readlinesメソッドを用いて、テキストファイルを読み込むサンプルコードです。

### readlines:テキストファイルを行ごと読み込みリストで取得
import os

dir_path = r'C:\ *--- 任意のディレクトリ ---* '
file_name = 'file1.txt'

file_path = os.path.join(dir_path, file_name)

with open(file_path) as f :
    lines = f.readlines()

print(lines)
# ['Apple 150\n', 'Banana 200\n', 'Orange 100\n', 'Grape 500\n', 'Lemon 100']

lines_s = [ line.strip() for line in lines ]
print(lines_s)
# ['Apple 150', 'Banana 200', 'Orange 100', 'Grape 500', 'Lemon 100']

> lines = f.readlines()

readlinesメソッドで、テキストファイルのデータを行ごとのリストとして取得しています。

> lines_s = [ line.strip() for line in lines ]

readlinesメソッドで取得した要素には、改行コード "\n" が含まれているため、
内包表記と文字列のstripメソッドを用いることで、要素から改行コードを取り除いています。

内包表記については、下記の記事で紹介しています。

内包表記の基本的な使い方

readlineメソッド:テキストファイルを1行分だけ読み込み

ファイルオブジェクトのreadlineメソッドを用いることで、テキストファイルから行ごとにデータを読み込むことができます

先ほどのreadlinesメソッドとは異なり、1行分だけファイルを読み込みます。

以下、readlineメソッドを用いて、テキストファイルを1行分だけ読み込むサンプルコードです。

### readlineメソッド:テキストファイルを1行分だけ読み込み
import os

dir_path = r'C:\ *--- 任意のディレクトリ ---* '
file_name = 'file1.txt'

file_path = os.path.join(dir_path, file_name)

with open(file_path) as f :
    line = f.readline()

print(line)
# Apple 150

readlineメソッドでテキストのすべてのコンテンツを取得する場合は、while文などを用いて最後の行まで読み取ります。

### readlineメソッドでテキストファイルのコンテンツをすべて取得
import os

dir_path = r'C:\ *--- 任意のディレクトリ ---* '
file_name = 'file1.txt'

file_path = os.path.join(dir_path, file_name)

with open(file_path) as f :
    while True :
        line = f.readline()
        line_s = line.strip()
        print(line_s)
        if not line :
            break

"""
Apple 150
Banana 200
Orange 100
Grape 500
Lemon 100
"""

linecacheモジュール:テキストファイルを行指定して読み込み

python標準モジュールのlinecacheモジュールを用いることで、テキストファイルの任意の行を指定して読み込むことができます

以下のサンプルコードでは、テキストファイルのうち、2行目を指定して読み込んでいます。

### linecacheモジュール:テキストファイルを行指定して読み込み
import linecache
import os

dir_path = r'C:\ *--- 任意のディレクトリ ---* '
file_name = 'file1.txt'

file_path = os.path.join(dir_path, file_name)

rownum = 2

line = linecache.getline(file_path, rownum)
print(line)
# Banana 200

linecache.clearcache() 

pathlibモジュールを用いて、テキストファイルの内容をすべて読み込み

次に、pathlibモジュールでテキストファイルを読み込む方法を紹介します。

pathlibは、python3.4から追加されたモジュールで、ファイルをオブジェクト形式で操作できます

以下の例では、pathlibモジュールで、ファイルのパスオブジェクトを作成し、テキストファイルの読み取りを行っています

pathlibモジュールのread_textメソッドを用いることで、ファイルのすべてのデータを一度に取得できます

### pathlibモジュールでテキストファイルをすべて読み込み
import pathlib
import os

dir_path = r'C:\ *--- 任意のディレクトリ ---* '
file_name = 'file1.txt'

file_path = os.path.join(dir_path, file_name)

p = pathlib.Path(file_path)
data = p.read_text()

print(data)
"""
Apple 150
Banana 200
Orange 100
Grape 500
Lemon 100
"""

> p = pathlib.Path(file_path)

pathオブジェクトを生成しています。

> data = p.read_text()

read_textメソッドで、テキストファイルのデータを文字列で取得しています。

pathlibモジュールを用いて、テキストファイルを行ごとに読み込み

pathlibモジュールを用いて、テキストファイルのデータを行ごとに取得することもできます

行ごとにデータを取得する場合は、ファイルオブジェクトを生成し、readlineメソッドで読み込みます。

以下、pathlibモジュールを用いて、テキストファイルのデータを行ごとに取得するサンプルコードです。

### pathlibモジュールでテキストファイルを行ごとに読み込み
import pathlib
import os

dir_path = r'C:\ *--- 任意のディレクトリ ---* '
file_name = 'file1.txt'

file_path = os.path.join(dir_path, file_name)

p = pathlib.Path(file_path)

with p.open('r') as f :
    while True :
        line = f.readline()
        line_s = line.strip()
        print(line_s)
        if not line :
            break
            
"""
Apple 150
Banana 200
Orange 100
Grape 500
Lemon 100
"""

> with p.open('r') as f :

with文を用いて、ファイルオブジェクトを生成しています。

ファイルオブジェクトから、行ごとにデータを取得する方法は前述の例と同じになります。

スポンサーリンク

まとめ

pythonで、テキストファイルのデータを読み込む方法について紹介しました。

ファイルの読み込みは、ファイル操作では必須の内容になります。各メソッド、モジュールの動作の違いも含めて覚えておくようにしましょう。

スポンサーリンク

スポンサーリンク

-文法・環境, 標準ライブラリ・モジュール
-,