Python3ファイル読み込み方法|open()関数、with構文による例外処理など
Contents
Python3でテキストファイルを読み込む方法
Python3でテキストファイルを読み込むにはopen()関数を用いてファイルオブジェクト(_io.TextIOWrapper)を取得します。
open()関数の書式
open(‘ファイルパス’, mode=’読み込みモード’, encoding=’エンコード’)
ファイルオブジェクトの基本操作
ファイルオブジェクトのread()メソッドはテキストファイルの全文をstr型で取得します。
一方、readlines()メソッドはテキストファイル内の1行1行を要素とするリストを返します。
close()メソッドでファイルを閉じます。
[スポンサードリンク]
最も原始的なファイル読み込みのサンプルプログラム
通常、ファイルの読み書きを実装する場合、必ず例外処理を書いて確実にファイルをクローズできるようにしますが、ここでは例外処理を一切書かない場合の最もシンプルなPython3におけるファイル読み込みのサンプルプログラムを掲載しています。
1 2 3 4 5 6 7 8 9 10 11 |
# 読み込みモード、utf-8でファイルオブジェクトを取得。 f = open('c:/test/test.txt', mode='r', encoding='utf-8') # テキストファイルの全文をstr型で取得。 text = f.read() # ファイルを閉じる。 f.close() # 取得した全文を画面に表示する。 print(text) |
<実行結果>
これはテストです。
これはテストです。
これはテストです。
例外処理について
ファイルの読み込み/書き込み時は確実にclose()が実行されるようにするために、
try~finally構文か、またはwith構文を利用します。
下記のPython3のサンプルプログラムではtry~finally構文を使って、予期せぬエラーが発生しても必ずファイルを閉じられるようにしています。
尚、try~except構文はopen()関数が失敗した場合のために使っています。
※with構文の使い方は下の方に掲載してあります。
テキストファイルを読み込みread()で全文を取得する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# 対象ファイルのパス path = 'c:/test/test.txt' # =================================================== # テキストファイルの読み込み # =================================================== try: # ファイルを開く。 f = open(path, mode='r', encoding='utf-8') try: # テキストを読み込む。戻り値はstr型。改行コードも含む。 text = f.read() # 読み込んだテキストを画面に表示する。 print(text) # 確実にファイルを閉じる。 finally: # ファイルを閉じる。 f.close() # open()関数でエラーが出た場合の処理。 except: print(path + 'を読み込めませんでした。') |
ファイルパスには絶対パスを指定しています。
指定したファイルパスにファイルが存在しない場合はエラーになります。
テキストファイルを読み込む場合、通常はmode=’r’でファイルオブジェクトを読み込みます。
今回はエンコーディングにutf-8を指定しましたが、Shift_JISを読み込む場合はencoding=’sjis’と書きます。
テキストファイルを読み込みreadlines()で全文を表示する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# 対象ファイルのパス path = 'c:/test/test.txt' # =================================================== # テキストファイルの読み込み # =================================================== try: # ファイルを開く。 f = open(path, mode='r', encoding='utf-8') try: # テキストを読み込む。戻り値はリスト型。 text = f.readlines() # 読み込んだテキストを画面に表示する。 for line in text: print(line) # 確実にファイルを閉じる。 finally: # ファイルを閉じる。 f.close() # open()関数でエラーが出た場合の処理。 except: print(path + 'を読み込めませんでした。') |
readlines()の戻り値はリスト型です。テキストファイルの1行が1要素に該当します。
またreadlines()で読み込むとき、改行文字(\n)も含まれます。そのためprint()すると下記のようになります。
これはテストです。
これはテストです。
これはテストです。
無駄な改行を消して綺麗にprint()するにはprint(line.replace(‘\n’, ”))等とし改行文字を空の文字列に置換するとうまくいきます。あるいはprint(line.strip())と書くことで改行コードを取り除くことができます。
(例)
f = open(‘c:/test/test.txt’, mode=’r’, encoding=’utf-8′)
try:
text = f.readlines()
for line in text:
print(line.strip())
finally:
f.close()
with構文を使ってファイルを読み込む場合
with構文を使えばtry~finallyによる例外処理を書かなくても確実にファイルを閉じることができます。またwith構文を利用する際はclose()を書かなくてOKです。自動的にwith構文の最後に、close()を呼んでくれます。
with構文の書式
with open() as 変数名:
処理
with構文を用いて確実にclose()する場合のファイル読み込みのサンプルプログラム
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# 対象ファイルのパス path = 'c:/test/test.txt' # =================================================== # with構文を用いたテキストファイルの読み込み # =================================================== try: # ファイルオブジェクトを変数fに代入。close()は書かなくてOK。 with open(path, mode='r', encoding='utf-8') as f: text = f.read() print(text) except: print(path + 'の読み込みに失敗しました。') |
(参考)Python3におけるテキストファイルへの書き込み
Python3におけるテキストファイルへの書き込みは下記サンプルプログラムのように書きます。
尚、wが上書きモードでaが追記モードです。
※with構文を利用しているのでclose()を書く必要はありません。自動的にclose()されます。
1 2 3 4 5 6 7 8 9 |
try: # テキストファイルを「上書きモード(w)」で開く。 with open('c:/test/test.txt', mode='w', encoding='utf-8') as f: # テキストファイルに上書きする。 f.write('2017年10月27日(金):Python3のファイル読み込みについての記事を更新した。\n') f.write('2017年10月28日(土):今週末は台風22号が来る!怖い!うざい!\n') print('ファイルの書き込みに成功しました。') except: print('ファイルの書き込みに失敗しました。') |
<実行結果>
ファイルの書き込みに成功しました。
[スポンサードリンク]